Zur Navigation

Reihen folge mit ORDER BY [2]

11 andehrl

ich habe den code wie beschrieben verändert. sieht jetzt so aus:

$query_R1 = "SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, DATE_FORMAT(Eingabe.datum, '%d.%m.%Y') AS datum_formatiert, TIME_FORMAT(Eingabe.zeit, '%H:%i') AS zeit_formatiert, IF(IS NULL(Eingabe.zeit), 1, 0) AS bar, Eingabe.hinfahrtladeflaeche, ...

bekomme aber dann diese fehlermeldung:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IS NULL(Eingabe.zeit), 1, 0) AS bar, Eingabe.hinfahrtladeflaeche, Eingabe.hilfee' at line 1  

01.10.2010 15:55

12 Jörg

IF(IS NULL(Eingabe.zeit), 1, 0) AS bar

Ja, das ist syntaktisch nicht korrekt :-\

Mit "IS NULL" (mit Leerzeichen) wäre es so korrekt:

IF(Eingabe.zeit IS NULL, 1, 0) AS bar

Besser noch - weil einfacher - ist es wohl mit ISNULL() (ohne Leerzeichen):

ISNULL(Eingabe.zeit) AS bar

Siehe auch:

http://dev.mysql.com/doc/refman/5.1/de/comparison-operators.html

01.10.2010 16:12

13 andehrl

ich habe beides ausprobiert.

einmal

$query_R1 = "SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, DATE_FORMAT(Eingabe.datum, '%d.%m.%Y') AS datum_formatiert, TIME_FORMAT(Eingabe.zeit, '%H:%i') AS zeit_formatiert, ISNULL(Eingabe.zeit) AS bar, Eingabe.hinfahrtladeflaeche, ...

und

$query_R1 = "SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, DATE_FORMAT(Eingabe.datum, '%d.%m.%Y') AS datum_formatiert, TIME_FORMAT(Eingabe.zeit, '%H:%i') AS zeit_formatiert, IF(Eingabe.zeit IS NULL, 1, 0) AS bar, Eingabe.hinfahrtladeflaeche,

ORDER BY sieht bei beiden so aus:

$query_R1 .= "1 ORDER BY Eingabe.datum, bar, ...

ich erhalte keine fehlermeldung aber in beiden fällen ist die reihen folge nach wie vor 00:00, 15:10, 15:20, usw.

01.10.2010 17:02

14 andehrl

ich habs grad nochmal vesucht mit

IF(Eingabe.zeit IS NULL, 1, 0) AS bar

die reienfolge der ergebnisse ändert sich doch. allerdings nicht wie gewünscht . ich erhalte jetzt erst den null-wert und darauffolgend den höchsten wert:
00:00, 15:45, 15:30, ...

ORDER BY sieht in diesem fall so aus:

$query_R1 .= "1 ORDER BY Eingabe.datum, bar";

01.10.2010 17:23 | geändert: 01.10.2010 17:32

15 Jörg

Ich würde erst nach `bar` sortieren und dann nach `datum`:

ORDER BY bar, Eingabe.datum

Dass das Datum absteigend sortiert wird, wenn du kein DESC drin hast, ist aber schon etwas komisch...

Steht das "00:00" übrigens so in den betreffenden Datenbankfeldern? das wäre ja was anderes als NULL und da müsste man die Abfrage auch anders gestalten


PS: du kannst anstelle von "bar" auch einen aussagekräftigeren Namen verwenden, wenn du möchtest (z.B. "istnull" oder so) - "foo" und "bar" sind nur so eine Art Platzhalter wie im Deutschen "bla" und "blub" :)

01.10.2010 17:52 | geändert: 01.10.2010 17:53

16 andehrl

Steht das "00:00" übrigens so in den betreffenden Datenbankfeldern? 

ja, wenn ein nutzer bei der eintragung der daten in der datenbank die uhrzeit nicht angibt wird in der datenbank "00:00:00" eingetragen.

01.10.2010 17:59

17 Jörg

Dann muss man `bar` anders definieren, so könnte es vielleicht funktionieren:

IF(Eingabe.zeit = '00:00:00', 1, 0) AS bar

01.10.2010 18:25

18 andehrl

Zitat von Jörg
Dann muss man `bar` anders definieren, so könnte es vielleicht funktionieren:

IF(Eingabe.zeit = '00:00:00', 1, 0) AS bar


das hat die gleiche wirkung wie DESC. wird zumindest so ausgegeben. bekomme jetzt ... 15:45, 15:30, 00:00

01.10.2010 18:33

19 Jörg

Du wolltest doch, dass die Datensätze mit "00:00" ans Ende kommen? Dafür sorgt die Sortierung mit bar. Warum die anderen Datensätze absteigend sortiert werden, weiß ich ehrlich gesagt nicht. Gib der Sortierung noch ein explizites ASC mit

ORDER BY bar, Eingabe.datum ASC

01.10.2010 18:45

20 andehrl

das datum wird ganz normal aufsteigend ausgegeben. nur die zeit wird absteigend angezeigt, so als würde ich

ORDER BY Eingabe.datum, Eingabe.zeit DESC

in den code eintragen

01.10.2010 19:15