Avatar billede alm7100 Nybegynder
02. oktober 2009 - 23:10 Der er 9 kommentarer

Query spørgsmål...

Hejsa
Håber i kan hjælpe mig.
Jeg bruger MySQL 4.1.22
Har følgende.
På min server kører jeg en/et php script via cron, der henter nogle temperatur data fra en hardware enhed jeg har.
Disse data ligger jeg i min SQL server hver 5 min hele døgnet.

Nu kunne jeg så godt tænke mig at f.eks kunne udlæse de data jeg har fra den sidste time.
Det gør jeg sådan her.
SELECT datetime, name_id, value  FROM templog WHERE templog.name_id = 7 ORDER BY templog.datetime DESC LIMIT 0,12

Det virker sådan set fint nok, men, ja der er et men, jeg får data i den forkerte rækkefølge, alså jeg får de nyeste data først, og vil meget gerne have de data først, som er en time gammel og så frem til de nyeste.

Er der en måde man kan gører det i en query???

MVH
Allan
Avatar billede martinbk Nybegynder
02. oktober 2009 - 23:15 #1
SELECT datetime, name_id, value  FROM templog WHERE templog.name_id = 7 ORDER BY templog.datetime ASC LIMIT 0,12

DESC = Descending (faldende order)
ASC = Ascending (stigende order)
Avatar billede alm7100 Nybegynder
02. oktober 2009 - 23:34 #2
Hejsa martinbk
Nej det virker ikke så får jeg dem fra den forkerte ende af (læs: de ælste) og jeg skal havde dem fra den anden ende af.
Hvis der står

1
2
3
4
5
6
7
8
9

Får jeg på min måde 9,8,7,6 (dog 12 af dem) på din måde får jeg
1,2,3,4,5,6 dog 12 af dem

Håber du forstår problemet.
Avatar billede alm7100 Nybegynder
02. oktober 2009 - 23:35 #3
Sorry lidt mere her.
Det jeg har brug for er 6,7,8,9 (Ved godt der ikke lige er 12 af dem :-)
Avatar billede erikjacobsen Ekspert
03. oktober 2009 - 00:27 #4
Det er vist mere end en gammel mysql4 kan klare. Hvad med at bare at vende dem om når de skal vises - med PHP eller lignende.

Eller bare opgradere til en mysql5 ?
Avatar billede martinbk Nybegynder
03. oktober 2009 - 00:35 #5
nu kan jeg ikke huske om mysql 4.1 understøtter subselects (hvorfor også bruge sådan en relativ oldnordisk version?)

men ellers noget ala:

SELECT datetime, name_id, value  FROM templog WHERE templog.name_id = 7 ORDER BY templog.datetime DESC LIMIT 0,12

SELECT * FROM (SELECT templog.datetime FROM templog WHERE templog.name_id = 7 ORDER BY templog.datetime DESC LIMIT 12) as temptbl ORDER BY temptbl.datetime ASC
Avatar billede martinbk Nybegynder
03. oktober 2009 - 00:36 #6
how udelad den første sætning, var sådan set bare der for overskuelighed da jeg skrev den anden sætning
Avatar billede arne_v Ekspert
03. oktober 2009 - 01:23 #7
4.1 burde understørre subqueries
Avatar billede alm7100 Nybegynder
03. oktober 2009 - 09:43 #8
martinbk

Takker for dit svar, det fik mig ledt godt på vej.

Den endelig sætning ser sådan her ud.
SELECT datetime, name_id, value FROM (SELECT templog.datetime, name_id, value FROM templog WHERE templog.name_id = 7 ORDER BY templog.datetime DESC LIMIT 12) as temptbl ORDER BY temptbl.datetime ASC
Avatar billede martinbk Nybegynder
03. oktober 2009 - 19:04 #9
jamen så vil jeg da tillade mig at ligge et svar
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