php/MySQL: ORDER BY funktioniert nur teilweise

27apricot

Erfahrenes Mitglied
Hallo allerseits,

ich habe gerade ein sehr merkwürdiges Problem: ich hab' in einem php-Script zwei verschiedene Abfragen von DB-Tabellen.

In einem Fall lass ich die Ergebnisse nach einer VARCHAR-Spalte, also alphabetisch sortieren, was funktioniert, in einem anderen nach einer DATE-Spalte, was nicht funktioniert. Beides sieht in der Syntax völlig gleich aus. Es gibt auch keine Fehlermeldung.

Hier die Abfrage mit der nicht funktionierenden Sortierung:

PHP:
$sql_konzerte = "
SELECT * FROM konzerte
WHERE id LIKE '$id_konzerte' AND datum>=CURDATE()
ORDER BY datum ASC
";
// ($id_konzerte kommt aus einer anderen Tabelle)

Die mit Hilfe der DATE-Spalte vorgenommene Begrenzung (WHERE) funktioniert übrigens.

Ich bin ziemlich ratlos.
Danke schonmal im Voraus,

Schöne Grüße,
27apricot.
 
hallo,

sie werden alle korrekt ausgegeben (wie gesagt, auch mit der Einschränkung »alle ab dem heutigen Tag«), aber nach ihrer ID sortiert, und nicht wie angegeben, nach dem Datum.

ciao
27apricot.
 
Da kann ich mir jetzt auch keinen Reim drauf machen.

Etwas iritiert bin ich jedoch von dem " WHERE id LIKE '$id_konzerte' ".
Eine id ist bei mir normalerweise eindeutig und hat ein auto_increment, also frage ich id mit = ab und erhalte nur einen Datensatz.

Deine Abfrage macht ja nur Sinn wenn $id_konzerte einen Joker hätte oder id nicht eindeutig ist.

Was ergibt denn
PHP:
 $sql_konzerte = "
SELECT datum, id FROM konzerte
WHERE id LIKE '$id_konzerte' AND datum>=CURDATE()
";
 
hallo german,

danke erstmal. Also, ohne die ORDER BY Klausel wird genau dasselbe angezeigt wie mit ihr. Nämlich die Konzerte, geordnet nach ID.

Die Variable $id_konzerte kommt aus einer anderen DB-Tabelle. Die oben genannte Abfrage fragt dann in einer Schleife nur die Konzerte mit jenen IDs ab.
(Es ist eine Seite mit mehreren Bands, die in einer Tabelle stehen. Die Konzerte stehen in einer anderen. Als drittes gibt es eine Tabelle in der die IDs der Konzerte jenen der Bands zugeordnet werden. Dieses System sorgt für größtmögliche Flexibilität. Es kann sozusagen auch ein Konzert mit zwei Bands stattfinden, dass dann bei beiden Bands erscheint.)

grüße. 27apricot
 
Zuletzt bearbeitet:
Manchmal muss man es erst aussprechen oder in dem Falle schreiben:

Also danke nochmal für deine Verblüffung, German. Denn dort liegt natürlich die Erklärung, wenn auch noch nicht die Lösung: die Abfrage erfolgt in einer while-Schleife, also für jede der vorher aus der anderen Tabelle ausgelesenen Konzert-ID einzeln. Somit kann ich natürlich nix sortieren, zumindest eben nicht in SQL, sondern erst in PHP.

ciao | 27apricot
 
Ich denke mal das sollten wir hinkriegen, meistens kann man darauf verzichten Abfragen innerhalb einer Result-Schleife zu starten.

Ich gehe mal von dieser DB-Struktur aus:
Code:
bands       konzerte        konzert_info
------      ---------       -------------
id          id              id
name        name            konzert_id
genre       ort             band_id
info        datum           sort
usw.        beginn
            usw.
Die Abfrage wäre dann:
PHP:
$sql_konzerte = "SELECT
    konzerte.*
FROM
    konzerte, konzert_info
WHERE konzert_info.band_id  = '$band_id'
  AND konzerte.id           = konzert_info.konzert_id
  AND konzerte.datum       >= CURDATE()";
 
Zurück