Avatar billede Slettet bruger
19. oktober 2003 - 01:16 Der er 6 kommentarer og
1 løsning

Hent 5 rækker hvor id for række nummer 3 kendes

Jeg skal sende en forespørgsel til mysql hvor jeg skal hente 5 rækker. Jeg kender alle data for række nummer 3.
For at gøre det mindre kompliceret skal I blot forestille jer at jeg har 2 felter:
mysql> SELECT * FROM table ORDER BY timestamp DESC;
+----+------------+
| id | timestamp  |
+----+------------+
|  2 | 1066408733 |
|  4 | 1065373445 |
|  6 | 1058116492 |
|  5 | 1058057042 |
|  9 | 1058056941 |
|  8 | 1058056742 |
|  7 | 1057829662 |
+----+------------+

Som I kan se kommer id og timestamp ikke i samme rækkefølge.
Nu har jeg så id'et for en række jeg vil have skal være nummer 3 (ikke nødvendigvis id=3) ud af 5, dvs. jeg skal have 2 rækker med højere timestamps og 2 rækker med lavere timestamps.
Desuden er der jo den mulighed at der ikke er nogen rækker højere (eller lavere) timestamps. I et sådant tilfælde er det okay at den række med det id jeg kender bliver nummer 1,2,4 eller 5 i resultatet.
Hvordan gør jeg det?
Avatar billede erikjacobsen Ekspert
19. oktober 2003 - 09:03 #1
SELECT id FROM mintabel WHERE id<=6 ORDER BY id desc LIMIT 3)
UNION
(SELECT id FROM mintabel WHERE id>6 ORDER BY id asc LIMIT 2)
ORDER BY id
Avatar billede erikjacobsen Ekspert
19. oktober 2003 - 09:03 #2
sæt selv en ( allerforrest
Avatar billede Slettet bruger
19. oktober 2003 - 23:32 #3
Tusind tak - Det var godt nok smart!
Til andre interesserede kan det siges at den er beskrevet i manualen 6.4.1.2 - og at den først virker fra version 4!
Gider du lige tilføje et svar så du kan få point?
Avatar billede erikjacobsen Ekspert
20. oktober 2003 - 06:49 #4
jo da

Jeg læser lige dit spørgsmål igen, og du siger vist at du altid vil have
5 rækker. Men hvis id-et er lige i starten, eller i slutningen, så får du
måske kun 3. Er det ok?
Avatar billede Slettet bruger
20. oktober 2003 - 15:57 #5
Tja, hvis der er mulighed for at trække 3 eller 4 rækker ud, som har lavere end timestamp på en given række, men kun hvis rækken kommer som 1. eller 2. resultat i den første del af query'en.
Det er meget rodet forklaret, håber du kan forstå det.
Avatar billede erikjacobsen Ekspert
20. oktober 2003 - 19:09 #6
Den eneste måde jeg kan se er at gøre noget i et scriptsprog ved siden af.
Du kan fx altid hent 4 før og 4 efter, og så ved udskrift springe nogen over.
Jeg tror ikke du kan lave en simpel SQL-sætning til det
Avatar billede Slettet bruger
20. oktober 2003 - 20:37 #7
Nej, men det er egentlig heller ikke så svært med PHP - jeg ville bare vide om det kunne lade sig gøre på en forholdsvis simpel måde i PHP.
Tusind tak!
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