mboost-dp1

PHP og mysql resultater sorteret BÅDE asc og desc.


Gå til bund
Gravatar #1 - Azuria
28. maj 2009 09:08
Hejsa
Jeg har en tabel der indeholder dato i formatet YYYYMMDD og tid i HH:MM:SS

Disse skal jeg have ud og sorteret så den først sortere efter dato, derefter tid.

Det er for sig ikke noget problem, så længe jeg kan nøjes med at sortere i enten ASC eller DESC.

Sorterer jeg i DESC, står nyeste dato først, men sidste klokkeslet også,
så det passer ikke godt overens når man skifter til næste dag på en lang kolonne.

Sorterer jeg i ASC, så står alt korrekt, dog er nyeste hits sidst i queryen...

Hvordan sorterer jeg dato desc og tid asc i samme query?
Min query ser pt sådan ud:
mysql_query("select * from portalevents order by dato, tid DESC")
Gravatar #2 - Windcape
28. maj 2009 09:11
Har du prøvet:


ORDER BY dato DESC, tid ASC
Gravatar #3 - Azuria
28. maj 2009 09:13
#2 Sjovt du siger det, troede ikke det ville virke, men prøvede lige inden du skrev...
Pinlig pinlig... :$
Men takker anywho, det var den rigtige løsning.
Gravatar #4 - sorenmalling
28. maj 2009 09:35
Hvorfor ikke gemme det i et unix-timestamp i stedet for to seperate felter?
Gravatar #5 - Windcape
28. maj 2009 10:27
Hvorfor ikke gemme det i et DATE felt, da det er endnu mere korrekt end unix timestamps, eller flere felter ;-)
Gravatar #6 - Azuria
28. maj 2009 10:49
Fordi det bliver hentet fra txt filer, og ikke udelukkende mig der har stået bag det.
en linie ser som udgangspunkt sådan ud:
May 28 12:27:51 192.168.15.200 logportalauth[18513]: FAILURE: 108433, 00:03:47:e8:36:d6, 192.168.0.90


Og den bliver så choppet op og smidt i diverse felter i tabellen.
Og den bliver udlæst på døgn basis.
Gravatar #7 - Windcape
28. maj 2009 10:57
Jeg ville stadig parse det ind i et DATE objekt.
Gravatar #8 - Azuria
28. maj 2009 11:02
#7 Dvs: YYYY-MM-DD HH:MM:SS ?
Og det magter den fint at lave en sort by på?
Gravatar #9 - Mandalae
28. maj 2009 11:16
Hvis du skal sortere forskellige på dato og tid kan man vel ikke nøjes med at gemme det i et felt? - Så er det jo netop den nyeste dato men også den seneste tid der kommer øverst.

Som jeg har forstået det vil du sortere det så den nyeste dato kommer op, men under den er det så samtidig den ældste tid, den dag - Right?
Gravatar #10 - Azuria
28. maj 2009 11:43
#9
jeg vil have at
2009-05-28 12:22:15
2009-05-28 08:14:15
2009-05-28 04:12:15
2009-05-28 00:02:15
døgnskifte
2009-05-27 23:40:15
2009-05-27 00:17:15
etc

Og det er jeg kommet frem til med "order by dato DESC, tid DESC"
Gravatar #11 - Mandalae
28. maj 2009 11:54
#10,

Nårh jamen så er der ikke noget i vejen for at du kan putte det hele i eet felt.

Personligt gemmer jeg altid unix timestamps i et int felt da det er nemmest at arbejde med uden at skulle tage højde for alt muligt.

Så jeg vil anbefale dig at du bare kører en strtotime() på hele din dato og så putter det i et int felt i db'en, så kan du bare sortere på det DESC og vupti du har samme struktur, men kun et enkelt felt.

et date felt som Windcape foreslår vil naturligvis også virke, men jeg foretrækker bare den her mere simple måde at gøre det på :)
Gravatar #12 - arne_v
28. maj 2009 12:38
#div

Et DATE felt virker ikke i MySQL, da det kun kan have dato delen og ikke tids delen.

I MySQL skal man bruge DATETIME for at få både dato og tids del.

En INT eller TIMESTAMP (i nyere MySQL hvor man kan disable den automatiske opdatering) med *nix tid kan også bruges.

Men bemærk at de har lidt forskellig semantik omkring skift til og fra sommertid og forskellige tidszoner.

Givet de viste data vil kun DATETIME kunne gemme data som de er.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login