Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2004 Teil von Dezember

SELFHTML Forumsarchiv
Datensätze mit NULL-Werten als letztes anzeigen

Informationsseite
  1. Seite (DATENBANK) Datensätze mit NULL-Werten als letztes anzeigen von calconeon, 27. 12. 2004, 12:26
nach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: calconeon, 27. 12. 2004, 12:26

Hallo,

gibt es eine SQL-Interne Lösung für folgendes Problem?

Ich habe eine Datenbank, in der die Traditionen einer Schule gespeichert sind. Ein Teil von ihnen wird immer in einem bestimten Zeitraum stattfinden, dieser als Monatswert gespeichert.
Der andere Teil finden quasi immer oder zu keinem bestimmten Zeitpunkt statt. Diese Datensätze haben ein NULL-Wert in der Spalte Monat.

Wenn ich das ganze nun ausgebe möchte ich aber zunächst die Datensätze mit den festgelegten Monatsweten, und die restlichen sollen unten angezeigt werden.

Gibt es in MySQL irgendeine Möglichkeit, Datensätze mit bestimmten Inhalten (Monat = NULL) gesondert zu behandeln und als letztes einzuordnen?

Mir ist klar, das ganze auch mit den PHP-Array-Funktionen möglich wäre, aber mir wäre eine SQL-Lösung lieber.

Dankeschön!

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: Ludger, 27. 12. 2004, 12:27

Hi,

»» Gibt es in MySQL irgendeine Möglichkeit, Datensätze mit bestimmten Inhalten (Monat = NULL) gesondert zu behandeln und als letztes einzuordnen?

ja, was haeltst Du von
 SORT BY
?

Gruss,
Ludger

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: calconeon, 27. 12. 2004, 12:30


»» ja, was haeltst Du von
»» SORT BY

Tut mir, kenne bisher nur ORDER BY. Ich werde mich gleich mal schlau machen.

Danke.

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: Ludger, 27. 12. 2004, 12:32

Hi,

»» Danke.

bitte nicht danken, ich meinte
 ORDER BY
.

Was passiert denn bei
 ORDER BY
mit den NULL-Werten. Kommen die vielleicht am Anfang oder Ende einer Datensatzmenge?

Gruss,
Ludger

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: calconeon, 27. 12. 2004, 12:36

Klar, ich soritere bereits mit ORDER BY nach monat.

Und dabei komen die NULL-Werte ganz nach Oben. ^^
Und mir gefällt es aber so nicht, sondern ich will sie unten haben.

Wenn ich jetzt die Sortierung mit DESC umdrehe, sind auch die Monate falsch sortert.

Gibt also vlt. doch eine elagante SQL-Lösung dafür?

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: Ludger, 27. 12. 2004, 12:41

Hi,

»» Gibt also vlt. doch eine elagante SQL-Lösung dafür?

zwei SELECT-Queries, die mittels UNION-Operator zu einer Query verbunden werden.

SELECT
 DF_1
FROM
 DT_1
UNION SELECT
 DF_1
FROM
 DT_1

Gruss,
Ludger

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: calconeon, 27. 12. 2004, 12:47

»» SELECT
»» DF_1
»» FROM
»» DT_1
»» UNION SELECT
»» DF_1
»» FROM
»» DT_1

SELECT *
FROM traditionen
WHERE monat IS NOT NULL
UNION
 SELECT *
 FROM traditionen
 WHERE monat IS NULL
ORDER BY monat,name

Ergibt wiederrum dasselbe Bild. Die leeren Monatswerte sind oben. Ein bisschen Nachhilfe brauch ich noch ^^.

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: calconeon, 27. 12. 2004, 13:23

Ich hab grad noch ein bisschen rumgebstelt, aber ich bekomm es nicht hin.

Wenn ich den ORDER BY-Befehl rausnehme ist alles klar, die NULL's sind hinten.

Aber ich möchte gleichzeitig, dass das nach Mnat soritert wird, wo dieser angegeben ist. Da ich nur, nach der MySQL-Refenez: http://dev.mysql.com/doc/mysql/de/UNION.html
die letzte Select-Anweisung sortieren kann, habe ich bisher noch keine Lösung gefunden.

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: rakkaus, 27. 12. 2004, 15:22

dumme frauen frage, warum machste nicht 2abfragen, erst alle wo es nicht leer ist und dann die leeren, die kannste dann hinten anhängen...
oder denkt frau zu einfach?

LG
rakkaus

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: calconeon, 27. 12. 2004, 15:28

Is mir doch auch klar, das es so funktioniert. Ich wollte bloß wissen, ob es eine elagantere Lösung gibt. Sieht doch viel schöner aus, wenn das in einer Abfrage ist.

MySQL soll ja auch PHP-unabhängig bedienbar sein, oder?

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: rakkaus, 27. 12. 2004, 16:05

okey hab etwas für dich:

select Wert from test order by Wert = '', Wert;

sollte erst alle nicht-leeren nach alphabeth bringen und dann die leeren...

paßts?
lg
rakkaus

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: calconeon, 28. 12. 2004, 11:38

»» select Wert from test order by Wert = '', Wert;

Ich hab mal folgendes draus gemacht:

SELECT *
FROM traditionen
ORDER BY monat,monat=NULL,name

Passt aber nicht, die NULL-Datensätze sind weiterhin oben. Umgedreht passts auch nicht.
Fänd's wunderbar, wenn es passen würde, weil das sehr schön kurz ist.

Mit dem '' kam ich nicht weiter, weil die Monate Zahlenwerte sind und August der 0 entspricht. Sept. der 1 usw. Das ist so, weil das ganze nach einem Schuljahr und nicht nach einem Kalenderjahr sortiert wird. Über eine Modulo-Anweisung wird dem ganzen der wirkliche Monat entnommen.

Daher sind die Spalten, die keinen Monat gleich NULL.

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: Rouven, 27. 12. 2004, 16:10

Hallo,

also man kann je nach Datenbanksystem auf verschiedene Arten NULL-Werte während des Queries durch etwas anderes ersetzenlassen. Beispiel für MySQL (und da die Funktion standardisiert ist auch für die meisten anderen Systeme):
SELECT ..., COALESCE(Monat, 13), ...
Die DB verwendet aus dem Ausdruck den ersten Wert, der nicht NULL ist, also entweder den Monat oder die 13. Wenn du also nun ein ORDER BY hast und die anderen Monate 1-12 sind, stehen deine NULL-Werte am Ende. Falls du Datumsfelder hast ist die Sache natürlich etwas komplexer, aber da kann man bestimmt auch was basteln...
http://dev.mysql.com/doc/mysql/en/Comparison_Operators.html.

MfG
Rouven

--
-------------------
ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: calconeon, 28. 12. 2004, 11:44

»» SELECT ..., COALESCE(Monat, 13), ...
»» Die DB verwendet aus dem Ausdruck den ersten Wert, der nicht NULL ist, also entweder den Monat oder die 13. Wenn du also nun ein ORDER BY hast und die anderen Monate 1-12 sind, stehen deine NULL-Werte am Ende.

Wäre schön, wenn es geht, aber das kannich aus einem anderen Grund nicht...

In Monat steht nicht wirklich der Monat sondern Die Anzahl der Monate, die seit Schuljahresbeginn verstrichen sind. Erst in PHP generiere ich draus den ehcten Monat und über eine switch-Abfrage der Monatsnamen. Das ganze passiert durch Modulo. Wenn dort jetzt Monat 12 bzw. 13 ist, wird daraus August bzw. September. Is dann auch logisch.

Daher kann ich auf diese Methode nicht zurückgreifen.

nach obennach unten

Datensätze mit NULL-Werten als letztes anzeigen

Die folgende Nachricht zum Thema stammt von: Ilja, 27. 12. 2004, 21:25

yo,

»» Gibt es in MySQL irgendeine Möglichkeit, Datensätze mit bestimmten Inhalten (Monat = NULL) gesondert zu behandeln und als letztes einzuordnen?

man kann eine "pseudo-spalte" mit angeben, die letztlich nicht ausgegeben wird, sondern nur der sortierung dient. dort kann man eine funktion einsetzen, die anstelle des null wertes einen anderen gewünschten wert ersetzt und somit die sortierung der NULL werte am ende setzt.

Ilja

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2004 Teil von Dezember

© 1998-2008 Seite Impressum, Software: Classic Forum