Order By In Union?

Folgende Abfrage wirft immer fehler:

$query = " SELECT
t1.*,
t1.name,
t2.favorisiert,
t2.lesen,
t2.schreiben,
t2.loeschen,
t2.aendern,
t2.freigeben,
t2.anlegen
FROM
00_struktur AS t1
LEFT OUTER JOIN
03_struktur_to_user AS t2 ON t1.SID = t2.SID
WHERE
t1.status = 'aktiv'
UNION
SELECT
t1.*,
t1.name,
t2.favorisiert,
t2.lesen,
t2.schreiben,
t2.loeschen,
t2.aendern,
t2.freigeben,
t2.anlegen
FROM
00_struktur AS t1
LEFT OUTER JOIN
03_struktur_to_user AS t2 ON t1.SID = t2.SID
WHERE
t1.status = 'aktiv'
ORDER BY
t1.name
";


Der Fehler ist:

Unknown column '00_struktur.name' in 'order clause'

Das name Feld ist aber vorhanden?! Was mach ich falsch?
 
Hallo,

in deinem Beispiel gibst du zwar den Feldnamen an, aber den gibt es mehrmals,
da du sowohl t1.* als auch t1.name machst. Damit ist "t1.name" bzw "name" nicht eindeutig und kein guter Stil.

Du solltest im ORDER BY bei UNIONs ohne Tabellenreferenz arbeiten, sondern nur mit
dem Spaltennamen oder der Spaltenpositon. Wenn du wie gesagt den Spaltennamen nutzen möchtest, muss er aber eindeutig sein.

also z.B.

SQL:
SELECT t1.name,
      t1.id,        
         ....
UNION
SELECT t1.name,
        t1.id,        
        ....
ORDER BY name

bzw.

SQL:
SELECT t1.name,
       t1.id,        
         ....
UNION
SELECT t1.name,
       t1.id,        
        ....
ORDER BY 1

Markus
 
Hi,

ich würde da ein Subselect draus machen:

PHP:
SELECT * FROM ("dein select") as blub ORDER BY blub.name

Das sollte eigentlich dann alles so sortieren wie du es brauchst.

Gruß
King of Darkness
 

Neue Beiträge

Zurück