Probleme bei Datenbanksortierung
am 29.11.2004 11:30:48 von info
Hallo Leute,
habe mal eine Frage zur Datenbanksortierung. Hier steht das Beipiel
wie es aussehen soll:
http://mitglied.lycos.de/interwark/
Und das ist die Abfrage die ich dazu geschrieben habe:
$query = "SELECT * FROM details d, schiff s WHERE s.id=d.id_schiff AND
s.id='$id.' order by versender asc, d.versand desc, d.eingang asc";
Leider kriege ich es wie in dem Beipiel geschrieben nicht hin. Ich
sortiere erst nach Versender (alles was Versand wurde geht nach
unten), dann nach Datum das als Timestamp abgelegt ist. Das Problem
was ich jetzt habe, ist das er nachdem er den Versand sortiert hat das
Versandatum gar nicht beachtet, trotz asc bzw. desc.
Hat jemand eine Idee was ich falsch mache und was ich ändern kann.
Danke und Gruß
Bernhard
Re: Probleme bei Datenbanksortierung
am 30.11.2004 00:20:38 von Uli Honal
Bernhard wrote:
> habe mal eine Frage zur Datenbanksortierung.=20
Xpost & F'up2 d.c.d.misc
(Ich sehe keinen Zusammenhang mit PHP.)
> Hier steht das Beipiel wie es aussehen soll:
> http://mitglied.lycos.de/interwark/=20
Vereinfacht:
Name | Eingang | Versand
---------------------------------
Otto 12.11.2004
Karl 15.11.2004 nach Hamburg
Josef 19.08.2004 nach Wien
> $query =3D "SELECT * FROM details d, schiff s WHERE s.id=3Dd.id_schiff =
AND
> s.id=3D'$id.' order by versender asc, d.versand desc, d.eingang asc";
>
> [..] Ich sortiere erst nach Versender (alles was Versand wurde geht nac=
h
> unten), dann nach Datum das als Timestamp abgelegt ist. Das Problem
> was ich jetzt habe, ist das er nachdem er den Versand sortiert hat das
> Versandatum gar nicht beachtet [..].
>=20
> Hat jemand eine Idee was ich falsch mache und was ich ändern kann.=20
Die jeweils nächste bei ORDER BY angegebene Spalte wird nur dann=20
berücksichtigt, wenn die Werte in vorherigen exakt gleich sind. Das=20
scheint bei "Hamburg" und "Wien" nicht der Fall zu sein, so dass hier=20
einfach "H" vor "W" kommt.
Vermutlich möchtest Du erstmal danach sortieren, ob die Versand-Spalte =
NULL ist oder nicht. Dazu bietet sich ein CASE an:
..
ORDER BY
CASE d.versand WHEN NULL THEN 1 ELSE 0 END,
d.eingang
Bei MySQL macht das die Funktion ISNULL() [1]:
"ISNULL(expr):
If expr is NULL, ISNULL() returns 1, otherwise it returns 0."
Ich hoffe das löst Dein Problem?
-Uli.
[1] http://dev.mysql.com/doc/mysql/en/Comparison_Operators.html