Avatar billede danino Nybegynder
14. december 2003 - 22:07 Der er 24 kommentarer og
1 løsning

Rigtig sortering

Hvordan får man php til at sortere "rigtigt"?

Jeg har denne kode:
mysql_query("select * from Events order by dato desc");
men den sorterer "forkert"

eks.
2003-9-6
2003-9-27
2003-9-20
2003-9-13
2003-8-30
2003-8-2
2003-8-16
2003-7-12
2003-6-27
2003-12-6
2003-12-31
2003-11-8
2003-11-22
2003-11-1
2003-10-4
2003-10-18
2003-10-15

Og det er jo ikke rigtigt...

Håber nogen kan hjælpe!
Avatar billede nak-m Nybegynder
14. december 2003 - 22:19 #1
Ville det ikke være nemmere bare, at bruge sort() efter du havde udtrukket dem?
Avatar billede danino Nybegynder
14. december 2003 - 22:22 #2
Måske... Kan du se hvordan den skal kringles, når nu jeg bruger denne kode? Jeg har et andet array, der indeholder events, hvis dato ligger i "fremtiden" (hehe... altså bare fra i morgen af, og frem)...

$pre=mysql_query("select * from Events order by dato");
while($liste=mysql_fetch_object($pre))
{
    $dato = $liste->dato;
    list($y,$m,$d) = explode('-',$dato);
    $eventtid = mktime(20, 0 , 0 , $m , $d , $y);
    if($now <= $eventtid)
    {
        $preevent[$i] .= "<a href=\"eventshow.php?id=" . $liste->id . "\">" . $liste->titel . "</a>\n";
        $i++;
    }
}
Avatar billede danino Nybegynder
14. december 2003 - 22:23 #3
Du/I får lige resten af koden:
$i=0;
$post=mysql_query("select * from Events order by dato");
while($liste=mysql_fetch_object($post))
{
    $dato = $liste->dato;
    list($y,$m,$d) = explode('-',$dato);
    $eventtid = mktime(20, 0 , 0 , $m , $d , $y);
    if($now > $eventtid)
    {
        $postevent[$i] .= "<a href=\"eventshow.php?id=" . $liste->id . "\">" . $liste->titel . "</a>\n";
        $i++;
    }
}
for($i=0; $i<=count($postevent); $i++)
{
    echo "<tr>\n
    <td width=\"45%\" align=\"left\">$preevent[$i]</td>\n
    <td width=\"55%\" align=\"left\">$postevent[$i]</td>\n
  </tr>\n";
}
Avatar billede eagleeye Praktikant
14. december 2003 - 22:24 #4
Det ser ud som om kolonnen dato er af typen char/text og ikke datetime, er det rigtigt?
Avatar billede nak-m Nybegynder
14. december 2003 - 22:27 #5
måske sådan:

$pre=mysql_query("select * from Events order by dato");
while($liste=mysql_fetch_object($pre))
{
    $dato = $liste->dato;
    $dato = sort($dato);
    list($y,$m,$d) = explode('-',$dato);
    $eventtid = mktime(20, 0 , 0 , $m , $d , $y);
    if($now <= $eventtid)
    {
        $preevent[$i] .= "<a href=\"eventshow.php?id=" . $liste->id . "\">" . $liste->titel . "</a>\n";
        $i++;
    }
}
Avatar billede danino Nybegynder
14. december 2003 - 22:27 #6
Ja, det er rigtigt... Kan jeg godt bare lave den om? Altså uden at jeg skal indtaste det hele igen?
Avatar billede danino Nybegynder
14. december 2003 - 22:29 #7
Nej, det virker ikke med dette... Faktisk kommer der slet ikke noget i $preevent...

$pre=mysql_query("select * from Events order by dato");
while($liste=mysql_fetch_object($pre))
{
    $dato = $liste->dato;
    $dato = sort($dato);
    list($y,$m,$d) = explode('-',$dato);
    $eventtid = mktime(20, 0 , 0 , $m , $d , $y);
    if($now <= $eventtid)
    {
        $preevent[$i] .= "<a href=\"eventshow.php?id=" . $liste->id . "\">" . $liste->titel . "</a>\n";
        $i++;
    }
}
Avatar billede eagleeye Praktikant
14. december 2003 - 22:29 #8
Ja det mener jeg godt du kan, da mysql bruger yyyy-mm-dd som datoformat.
Avatar billede nak-m Nybegynder
14. december 2003 - 22:30 #9
eagleeye: skal det ikke nærmere være DATE, de skal være?
Avatar billede danino Nybegynder
14. december 2003 - 22:32 #10
problemet er at mine dato nogle gange er yyyy-m-d f. eks. ved 2003-9-3... Bliver det så et problem?
Avatar billede nak-m Nybegynder
14. december 2003 - 22:35 #11
det ville være smartere at skrive det som 2003-09-03 ... er det ikke muligt?
Avatar billede eagleeye Praktikant
14. december 2003 - 22:37 #12
Ja DATE hedder den. men ja hvis du kan gemme dem som 2003-09-03 så der heller ikke noget problem når det er text. DATE typen skulle gerne gøre at den tager højde for at 9 er mindre end 12.
Avatar billede danino Nybegynder
14. december 2003 - 22:38 #13
Hm.. jo... Er der så ikke en af jer hajer, det kan lave lidt kode, der selv ændrer det? Ellers skal jeg manuelt i phpmyadmin sidde og ændre hver eneste dato...
Avatar billede nak-m Nybegynder
14. december 2003 - 22:40 #14
Jeg er nemlig ikke en haj, men har lidt på fornemmelsen, at du skal bruge noget ALTER TABLE kode :) eagleeye kan sikkert lave det for dig.
Avatar billede erikjacobsen Ekspert
14. december 2003 - 22:41 #15
Du kan bare konvertere dit text-felt til et date-felt, så laver den selv 9 til 09
(hvis jeg ellers har forstået problemet korrekt)
Avatar billede eagleeye Praktikant
14. december 2003 - 22:43 #16
Hvis du bare sætte varchar -> DATE laver mySQL selv 9->09
Avatar billede eagleeye Praktikant
14. december 2003 - 22:44 #17
doh det har erikjacobsen skrevet.
Avatar billede erikjacobsen Ekspert
14. december 2003 - 22:44 #18
Med en alter hedder det

ALTER TABLE `dintabel` CHANGE `ditfeltnavn` `ditfeltnavn` DATE

bemærk at feltnavnet skal stå der 2 gange. Tag BACKUP først. Er du mere usikker
så kan du

1) Lav et nyt felt, med nyt navn, men at typen DATE
2) Lav en "update dintabel set nytfelt=gammeltfelt"
3) Check at alt fungerer med det nye felt
4) Slet det gamle felt og omdøb det nye til det gamle
Avatar billede danino Nybegynder
14. december 2003 - 22:48 #19
Ja, nu virker det... Tak skal I have... Hvem vil have pointene?
Avatar billede nak-m Nybegynder
14. december 2003 - 22:49 #20
De skal nok gå til erikjacobsen :)
Avatar billede danino Nybegynder
14. december 2003 - 22:50 #21
Når nu erikjakobsen har lavet en så udførlig vejledning (selv om jeg brugte phpmyadmin, hvor der er en indbygget funktion til det samme), må det næsten være ham... Ellers må I lige brokke jer... Så hvis du laver et svar erikjakobsen?
Avatar billede erikjacobsen Ekspert
14. december 2003 - 22:53 #22
Hvem er den erikjakobsen?? Nej, skidt med points. Jeg har faktisk ikke
fortjent dem, da jeg slet ikke har sat mig ind i alle indlæg ;)

Men du fik det til at virke?
Avatar billede danino Nybegynder
14. december 2003 - 22:57 #23
Ja, det virker fint nu... Tak for hjælpen :-)
Avatar billede danino Nybegynder
14. december 2003 - 22:58 #24
Men så lukker jeg selv om 5-10 min, hvis ingen andre vil mene at netop de skal have pointene :-)
Avatar billede danino Nybegynder
14. december 2003 - 23:10 #25
Lukker..
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