Avatar billede mrplov Nybegynder
07. juli 2004 - 13:51 Der 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.

På forhånd tak.
Avatar billede proaccess Nybegynder
07. juli 2004 - 13:54 #1
Grunden til at du ikke fik bedre løsninger, er jo nok at du selv har fundet den optimale løsning...  ;0)
Avatar billede mrplov Nybegynder
07. juli 2004 - 14:08 #2
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.
Avatar billede proaccess Nybegynder
07. juli 2004 - 14:43 #3
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é.
Avatar billede mrplov Nybegynder
08. juli 2004 - 00:01 #4
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.
Avatar billede proaccess Nybegynder
08. juli 2004 - 08:17 #5
Når jeg skriver "LIMIT Poster-4, 7", så var det udtrykket Poster-4, altså resultatet fra den første SELECT COUNT(*) fratrukket 4
Avatar billede mrplov Nybegynder
08. juli 2004 - 12:09 #6
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å.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester