Avatar billede para7 Nybegynder
12. februar 2010 - 12:29 Der er 3 kommentarer og
1 løsning

ORDER BY date for ureglementeret datafelt

Jeg har forsøgt at få sorteret nogle data fra MYSQL database tabel. Dato er indskrevet i et VARCHAR felt som d/m yyyy hh:mm (fx som i dag 12/2 2010 12:01).

Her er mine forsøg med SQL streng:
//$sql = "SELECT * FROM documents ORDER BY date DESC";
//$sql = "SELECT *, STR_TO_DATE(replace(date,'/','-'), '%d-%m-%Y %T') AS date_for_sort FROM documents ORDER BY date_for_sort DESC";
$sql = "SELECT *, STR_TO_DATE(date, '%d/%m-%Y %T') AS date_for_sort FROM documents ORDER BY date_for_sort ASC";

Jeg har brugt hjælp fra:
http://www.experts-exchange.com/Database/MySQL/Q_24221024.html
og
http://blogs.vinuthomas.com/2008/06/02/mysql-tip-ordering-by-date-stored-in-a-varchar-field/

Hvad er der galt? Sorteringen har ingen indflydelse.
Avatar billede mike2002 Nybegynder
12. februar 2010 - 14:02 #1
Det ser i hvert fald ud til at der er en streg ("-") for meget:
STR_TO_DATE(date, '%d/%m-%Y %T') burde være
STR_TO_DATE(date, '%d/%m %Y %T')

Og så ved jeg ikke, hvordan det er med skråstreger, men det er normalt ikke noget, der er populært for php/mysql eller data i det hele taget, tror jeg...

Endelig returnerer %T hh:mm:ss, så måske kunne du prøve med
%k:%s (timer:minutter).

Ellers tror jeg jeg ville lave et timestamp felt og sortere efter det i stedet?
Avatar billede para7 Nybegynder
12. februar 2010 - 15:36 #2
Tak, men det virker ikke endnu.

Jeg har prøvet som du sagde, og har så tilføjet noget replace for at matche den streng jeg har i databasefeltet, som jo er x som i dag 12/2 2010 12:01

//$sql = "SELECT *, STR_TO_DATE(date, '%d %m %Y %k %i') AS date_for_sort FROM documents ORDER BY date_for_sort DESC";
$sql = "SELECT *, STR_TO_DATE(replace(replace(date,'/','-'),' ','-'), '%d %m %Y %k %i') AS date_for_sort FROM documents ORDER BY date_for_sort DESC";
13. februar 2010 - 07:35 #3
Simpelhen lave din format string saa den hvor din date string har et tal oversaetter det til en date eller tid vaerdi og hvor din date string har vaerdier andet end tal gengiv dem direkte i din format string.

Jeg puttede nogle vaerdier i en tabel og lavede denne query:

SELECT * , STR_TO_DATE( date, '%d/%m %Y %H:%i' ) AS dato
FROM para7
ORDER BY dato DESC

og jeg fik dette resultat fra nogle testdata jeg puttede i en tabel:

navn  date            dato 
hans  13/4  1945 00:00 1945-04-13 00:00:00
hans  12/12 1944 12:01 1944-12-12 12:01:00
hans  11/11 1944 12:01 1944-11-11 12:01:00
hans  4/11 1944 12:01 1944-11-04 12:01:00
hans  3/10 1944 12:01 1944-10-03 12:01:00
hans  13/4 1944 12:01 1944-04-13 12:01:00
hans  13/4 1944 00:01 1944-04-13 00:01:00
hans  14/4 1943 12:02 1943-04-14 12:02:00
hans  15/4 1942 02:01 1942-04-15 02:01:00
hans  16/4 1941 12:01 1941-04-16 12:01:00
Avatar billede para7 Nybegynder
13. februar 2010 - 08:30 #4
Super duper tak... Det var en drilsk ting.. :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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