PHP Script - Select Problem

  • Hallo zusammen,

    mein sehr lückenhaftes PHp bzw SQL Wissen stellt mich aktuell vor größere Probleme. Ich nutze einen Wordpress Blog und möchte da gerne ein Tippspiel Plugin verwenden (wp_championship).

    Bei der Zusammenstellung des Spielplans für die WM 2010 ist mir aufgefallen, dass die Anordnung der Daten nach Datum wunderbar funktioniert, solange es sich um den gleichen Monat handelt. Sobald dieser wechselt geschieht die Anordnung nach dem Tag unabhängig vom Monat. Für mich als Laie ist es jetzt gerade nicht leicht den entsprechenden Fehler in dem komplexen Script zufinden, das anscheinen schon länger nicht mehr weiterentwickelt wurde (vgl. Website).

    Ich habe per php Admin die Daten in der Tabelle angeschaut und die sind alle korrekt. Daher dachte ich mir das möglichwerweise der Fehler in der Select Abfrage bzw der Sortierung der selbigen liegt.

    Diese lautet:

    PHP
    // hole match daten
     $sql="select a.mid as mid,b.groupid as groupid,b.name as team1,b.icon as icon1, 
    c.name as team2,c.icon as icon2,a.location as location,date_format(a.matchtime,'%d.%m<br />%H:%i') as matchtime,
    a.matchtime as origtime,a.result1 as result1,a.result2 as result2,a.winner as winner,
    a.round as round from $cs_match a inner join $cs_team b on a.tid1=b.tid inner join $cs_team c on a.tid2=c.tid where a.round in ('V','F') order by matchtime;";
     $results = $wpdb->get_results($sql);

    Ich vermute die Variablen sind soweit selbsterklärend. V steht für Vorrunde und F für Finalrunden. Alle Spiele haben diesbezüglich in der sql-Tabelle die korrekte Bezeichnung (in der Ausgabe werden Vorrunden und Finalrunden spiele gemischt, da die ersten Juli-Tage vor dem Beginn der WM - bezogen rein auf den Tag im Sinne von 1 bis 31 - liegen)

    Ich hoffe ihr versteht das Problem und habt optimalerweise noch einen Korrekturvorschlag ;)

    Danke

  • Du sortierst die Datenbankabfrage nach matchtime.

    Matchtime wird hier erzeugt:

    PHP
    date_format(a.matchtime,'%d.%m<br />%H:%i') as matchtime

    Das bedeutet, dass du einen Wert der Form 30.03<br />22:12 mit einem anderen zu vergleichen versuchst.

    Versuch mal folgendes:

    PHP
    // hole match daten
     $sql="select a.mid as mid,b.groupid as groupid,b.name as team1,b.icon as icon1, 
    c.name as team2,c.icon as icon2,a.location as location,date_format(a.matchtime,'%d.%m<br />%H:%i') as matchtime,
    a.matchtime as origtime,a.result1 as result1,a.result2 as result2,a.winner as winner,
    a.round as round from $cs_match a inner join $cs_team b on a.tid1=b.tid inner join $cs_team c on a.tid2=c.tid where a.round in ('V','F') order by origtime;";
     $results = $wpdb->get_results($sql);

    So vergleichst du den unveränderten Zeitwert aus der DB. Möglicherweise ist dieses ein Timestamp und führt zu dem richtigen Ergebnis?!