07. juli 2004 - 13:51Der er
5 kommentarer og 1 løsning
Pröver igen
Hej
Jeg har en tabel med et ID field som kan have "huller". Jeg behöver en query som kan retunere: Row -3 Row -2 Row -1 Row Row +1 Row +2 Row +3 ud fra et givent ID, altså 7 rows totalt. Problemet er at jeg ikke bare kan sige Row - eller + 1 da der kan forekomme spring i ID'erne. Som det er nu laver jeg en UNION:
(SELECT SQL_CACHE ID, CategoryID, SubCategoryID, Added FROM Pictures WHERE CategoryID =8 AND SubCategoryID =26 AND ID <=Givent ID ORDER BY ID DESC LIMIT 4) UNION (SELECT SQL_CACHE ID, CategoryID, SubCategoryID, Added FROM Pictures WHERE CategoryID =8 AND SubCategoryID =26 AND ID >Givent ID ORDER BY ID LIMIT 3) ORDER BY ID
Er der en som har en ide til en "billigere" query? Jeg har en mistanke om at denne bliver for tung i det lange löb.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Hm, jeg har bare en ide om at det kan optimeres. Noget med at selecte feks. ID-10 med LIMIT på 20 rows og indexere dem med en tällervariabel. Med den täller kunne man så välge plus og munus ud fra det ID man har. Jeg har selv fedtet med det, men kunne ikke få det til at virke, tänkte at en haj her måske kunne.
Du har jo selv udelukket ID-10, da du ved at der er huller i ID (og er der først et lille hul, så kan der jo også være et større)...
Jeg tænkte selv på at udtage alle opster mindre end lig med dit ID (Samme som første del af din UNION), derefter findes antal poster i det udtræk, og så laver man et udtræk på alle poster med LIMIT.
Eksempel: SELECT COUNT(*) Poster FROM Pictures WHERE CategoryID=8 AND SubCategoryID=26 AND ID<=Givent ID
SELECT SQL_CACHE ID, CategoryID, SubCategoryID, Added FROM Pictures WHERE CategoryID=8 AND SubCategoryID=26 ORDER BY ID DESC LIMIT Poster-4, 7
Du skal så "opbevare" Poster fra den ene forespørgsel til den anden... Det er IKKE testet på nogen måde, men er bare ment som en idé.
Ja, der kan være huller, men jeg tænkte at selecte en god potion feks. 30 eller flere rows for dermed at få de 7 rows. Ikke så elegant, indrømmet.
Mht. din ide, du skriver "LIMIT Poster-4,7", KAN man lave en LIMIT -4,7? Det prøvede jeg selv uden held som det første, ved sku ikke hvorfor det ikke virkede. Jeg må lige tjekke det igen. Tak for din hjælp.
Ja det ser jeg nu, var vist trät da jeg skrev sidste kommentar. Anyway, jeg testede og det virker. Jeg ved bare ikke om det er en hurtigere lösning, men det må jo komme an på en pröve når der kommer belastning på.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.