2016-06-13 5 views
1

Dies ist meine eigentliche Abfrage:MySQL ORDER BY erstes Feld dann zweites Feld

SELECT DISTINCT eventi.img AS img, posizione AS pos 
    FROM eventi 
    WHERE homepage =1 
    UNION 
    SELECT DISTINCT prodotti.img, prodotti.posizione 
    FROM prodotti 
    WHERE homepage =1 
    ORDER BY pos ASC 

es gibt Positionen wie "1,1,2,2". Ich will, dass es Positionen nach Feldern zurückgibt, wie "Event Position 1,2 -> dann Produkte Position 1,2". Jetzt ist es Mischen von Ereignissen und Produkten Positionen ...

Antwort

2

Sie können es wie folgt tun:

SELECT t.img,t.pos FROM (
    SELECT DISTINCT 1 as order_col, eventi.img AS img, posizione AS pos 
    FROM eventi 
    WHERE homepage =1 
    UNION 
    SELECT DISTINCT 2 , prodotti.img, prodotti.posizione 
    FROM prodotti 
    WHERE homepage =1) t 
ORDER BY t.order_col,t.pos 

Wenn Sie nicht über die Wahl des order_col kümmern, dann können Sie, indem Sie in den Unter wählen und setzen Sie die Bestellung vermeiden.

+0

funktioniert, danke – Tony33

0

Wie die docs, haben Sie eine Union, und Sie müssen einen zusätzlichen Schritt, um sicherzustellen, dass order by Klauseln in der endgültigen Abfrage der Union für alle Abfragen gelten und nicht nur die letzte Abfrage:

SELECT ... 
UNION 
SELECT ... ORDER  <--order final query only 

vs

(SELECT ...) 
UNION 
(SELECT ...) ORDER  <--order all queries as a single set 

Hinweis die extra ().

+0

mit '(SELECT DISTINCT eventi.img AS img, eventi.posizione AS pos FROM EVENTi WHERE Homepage = 1 ORDER BY pos ASC) UNION (SELECT DISTINCT prodotti.img, prodotti.posizione AS POS2 FROM prodotti WHERE Homepage = 1 ORDER BY pos2 ASC) 'Ich bekomme jetzt 1-2-2-1 ... – Tony33