PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL: Einträge nach mehreren Spalten ordnen


clm[k1]
2004-10-12, 12:34:12
Folgende Situation:

Eine Tabelle mit 3 Spalten
spalte 1 mit den daten
spalte 2 mit einem timestamp
und spalte 3 auch mit einem timestamp

spalte 3 hat aber nur in ausnahmefällen einen timestamp und ansonsten '0'

Nun will ich das ganze sortieren nach dem timestamp
ABER: wenn spalte einen timestamp enthält (also nicht '0' ist) dann soll nicht der timestamp aus spalte 2 sondern der aus spalte 3 zum sortieren herangezogen werden!

geht das mit einem SQL-statement, oder muss ich 2 separate statements machen, und das endgültige sortieren mit php lösen??

gruß
clm[k1]

GiLo5
2004-10-13, 11:05:44
bin mir nicht ganz sicher ob du das meinst:

SELECT ... ORDER BY spalte3, spalte2

HellHorse
2004-10-13, 11:46:14
Also das geht zumindest mit PostgreS. Gibt sicher schönere Wege, aber das ist mir spontan eingefallen.

CREATE TABLE sample (
data_field VARCHAR(64) NOT NULL DEFAULT '',
stamp1 TIMESTAMP NOT NULL,
stamp2 TIMESTAMP
);

INSERT INTO sample (data_field, stamp1, stamp2)
VALUES ('tomorrow' ,'14-Oct-2004', null);
INSERT INTO sample (data_field, stamp1, stamp2)
VALUES ('today' , '13-Oct-2003', '13-Oct-2004');
INSERT INTO sample (data_field, stamp1, stamp2)
VALUES ('yesterday' ,'12-Oct-2004', null);

SELECT united.data_field, united.stamp
FROM (( SELECT data_field, stamp1 AS stamp
FROM sample
WHERE stamp2 IS NULL)
UNION
(SELECT data_field, stamp2 AS stamp
FROM sample
WHERE stamp2 IS NOT NULL))
AS united
ORDER BY united.stamp;

DROP TABLE sample;

Kann sein, dass es mit MySQL >= 4.1 läuft, kann auch sein dass es nicht geht.

Aber das sind genau so Gründe, die es mir schleierhaft machen, warum man MySQL und nimmt, wenn man "direkt" per SQL dagegen programmiert und es nicht durch einen Middleware Layer wegabstrahiert ist.