Avatar billede lassel Nybegynder
17. oktober 2003 - 21:21 Der er 16 kommentarer og
1 løsning

order by dato?

Hejsa...

Jeg har data i en mysql-database hvor jeg gerne vil have while-løkken arrangeret efter dato-variablen

Formatet på dato-variablen ser f.eks. således ud:
03/11-03

Udover dato er der en tidspunkt-variabel ex.:
13:00

Koden for udtrækningen af data ex.:

if($where==kalender) {
$rownumber = mysql_query ("select * from kalender order by dato DESC");

while ( $row = mysql_fetch_array($rownumber) ) :
if($userauth=='1') {

$fyldet .= nl2br("<b>$row[dato] $row[tidspunkt]<br>$row[overskrift]</b><hr>$row[indhold]<br><i>$row[afsender]</i>$sletkalender$row[id]$sletkalender2<br><br>"); } else { $fyldet .= nl2br("<b>$row[dato] $row[tidspunkt]<br>$row[overskrift]</b><hr>$row[indhold]<br><i>$row[afsender]</i><br><br>");

}
endwhile;
}

Som i kan se har jeg allerede order by dato i query'en... men hvordan får jeg den til at fungere ordentligt?

Som den er nu sorterer den f.eks. således:

19/10-03 13:30
15/11-03 14:30
10/09-03 15:00
05/12-03 23:00

Altså den sortere kun efter første 2 cifre...

Jeg ved at jeg måske skulle have lavet det smartere fra start... men er der en udvej med det system jeg har nu?

Please :)
Avatar billede jakobclausen Nybegynder
17. oktober 2003 - 21:26 #1
Grunden til at den kun sortere efter de to første cifre er jo fordi at din database ikke kan forstå den dato angivelse du har lavet. Jeg ser to udveje af dette, men desværre kræver det lidt ændringer.

(1) Du kan vælge at dele dato feltet op i tre (dag, måned, år) og så bruge
ORDER BY år DESC, måned DESC, dag DESC

(2) Du kan også vælge at give dato feltet i databasen typen date (yyyy-mm-dd), dette kræver så bare at du lægger datoen ind som f.eks. 2003-10-19 og nu kan du bruge din sql sætning.
Avatar billede lassel Nybegynder
17. oktober 2003 - 21:29 #2
Jeg søger desværre ikke grundlæggende ændringer, men en løsning på nuværende system :(

Jeg er godt klar over at det du skriver er en måde man kan gøre det på, men det hjælper ikke hvis man har flere 100'er rows af data, desværre!
Avatar billede schaefner Juniormester
17. oktober 2003 - 21:30 #3
Du kunne jo lave et php-script som ændrede det hele for dig, så du ville få et dato-format mysql kan arbejde med.
Avatar billede lassel Nybegynder
17. oktober 2003 - 21:33 #4
Hmmmm, tjaaa, det var en mulighed... kan godt selv lave det, men jeg ville nu stadig godt have det format jeg har nu... det er praktisk og overskueligt for brugeren
Avatar billede schaefner Juniormester
17. oktober 2003 - 21:34 #5
jamen, du kan jo så med sql ændre det så det står som du vil have, men stadig have det liggende i et format den kan bruge til at sortere.
Avatar billede lassel Nybegynder
17. oktober 2003 - 21:38 #6
Altså dele det op i tre.
Hmmmm, ja, det var da en løsning.
Man er lidt træt af at når siden har kørt i lang tid og der er meget data, at man så ikke tænkte over at man ville bruge data'en på den måde senere, og at man så ikke lavede det ordentligt. Men ok, et script der retter op på gamle fejl i databasen er da en god ide :) Tror jeg jeg går igang med... takker... du kommentere kun, ingen svar?
Avatar billede schaefner Juniormester
17. oktober 2003 - 21:39 #7
nej, ikke dele det op i tre. Have det liggende som et datetime i databasen (yyyy-mm-dd hh:mm:ss), men formatere (til dd/mm-yy hh:mm) når du vil vise det.
Avatar billede schaefner Juniormester
17. oktober 2003 - 21:39 #8
Kan godt lave et eksempel hvis du er intereseret?
Avatar billede lassel Nybegynder
17. oktober 2003 - 21:41 #9
vil jeg gerne have :)
Avatar billede jakobclausen Nybegynder
17. oktober 2003 - 21:42 #10
bettetorpen >> Det var det samme som jeg forslog dig ;-)
Avatar billede schaefner Juniormester
17. oktober 2003 - 21:46 #11
Har hver række i databasen et unikt id?
Avatar billede lassel Nybegynder
17. oktober 2003 - 21:46 #12
jakobclausen:
"(2) Du kan også vælge at give dato feltet i databasen typen date (yyyy-mm-dd), dette kræver så bare at du lægger datoen ind som f.eks. 2003-10-19 og nu kan du bruge din sql sætning."

:)
Jeps, men der mangler bare en omformatering  fra yyyy-mm-dd til den jeg bruger nu. Og du nævnte ikke at jeg evt. kunne lave et script til at ændre nuværende data til et dato-format mysql kunne finde ud af at sortere.

Men ja. Det var også hvad du sagde.
Avatar billede jakobclausen Nybegynder
17. oktober 2003 - 22:01 #13
bettetorpen >> Hjalp en igår med en sådan dato formatering, som du også burde kunne bruge:

www.bokaj.dk/eksperten/414917.php
Avatar billede lassel Nybegynder
17. oktober 2003 - 22:01 #14
schaefner: ja... men et id=3 kan f.eks. godt have dato=2003-11-19 og id=1 dato=2003-12-24
Avatar billede lassel Nybegynder
17. oktober 2003 - 22:02 #15
må desværre smutte... jeg er meget taknemmelig for at i svarer så hurtigt... havde egentlig kun skrevet spørgsmålet så jeg kunne se på svar imorgen... så jeg kigger på det igen imorgen... tak
Avatar billede schaefner Juniormester
17. oktober 2003 - 22:03 #16
Dette script er med alle forbehold. Jeg garanterer ikke for noget.

<?php
// Tilslut databasen

$sql = mysql_query("SELECT id,dato FROM kalender") or die(mysql_error());
$newdate  = array();
while ($row = mysql_fetch_assoc($sql)) {
    $id = $row['id'];
    $dato = $row['dato'];
    $date = substr($dato,0,2);
    $month = substr($dato,3,2);
    $year = '20'.substr($dato,6,2);
    $hour = substr($dato,9,2);
    $minute = substr($dato,12,2);

    $newdate[$id] = $year.'-'.$month.'-'.$date.' '.$hour.':'.$minute.':00';
}

mysql_query('ALTER TABLE `kalender` CHANGE `dato` `dato` DATETIME DEFAULT \'0000-00-00 00:00:00\' NOT NULL') or die(mysql_error));

foreach ($newdate AS $key => $value) {
    mysql_query("UPDATE kalender SET dato='$value' WHERE id=$id") or die(mysql_error());
}
echo 'Det burde være ændret nu';
?>
Avatar billede lassel Nybegynder
17. oktober 2003 - 22:06 #17
ohhh, kendte ikke substr :) smart nok... hehe i havde samme løsning men jakob kom først... dog kunne schaefner gøre den komplet med mysql-koden også :)

Bukker og takker og i får point imorgen hvis i begge har lavet et svar... jakob har,,, men schaefner mangler :)

Tak, jeg kigger på det imorgen
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