Auge: UNION in IN() als Teil einer WHERE-Klausel?

Beitrag lesen

Hallo

 WHERE entries.id IN((SELECT id FROM entries WHERE spam = 0 ORDER BY time DESC LIMIT 6) UNION (SELECT id FROM entries WHERE spam = 0 ORDER BY edited DESC LIMIT 6))

Hast du mal die Klammern um die Einzel-Selects weggelassen?

Nein. Da die einzelnen zum UNION gehörenden SELECTs jeweils ihre eigenen ORDER BY edited DESC LIMIT 6 haben, sollen sie laut der MySQL-Doku geklammert werden, damit die letzen Bedingungen nicht auf den gesamten UNION angewandt werden. Also habe ich es nicht anders probiert.

Oder noch eine Klammer um das Gesamt-Union-Konstrukt gesetzt? Oder beides?

Das werde ich morgen noch einmal probieren.

#1064 - You have an error in your SQL syntax;
check the manual … for the right syntax to use near
'UNION (SELECT id FROM entries WHERE spam = 0 ORDER BY edited DESC LIMIT 6))' at line 11

Ich vermute, dass MySQL aufgrund der öffnenden Klammer eine Subquery erwartet. Und die endent nach der ), woraufhin Syntax folgt, die in einem IN() falsch ist.

Hmm. Klammer auf vom IN, Klammer auf des ersten SELECT, Klammer zu des ersten SELECT, UNION, Klammer auf des zweiten SELECT, Klammer zu des zweiten SELECT und schließlich Klammer zu von IN. Eigentlich sollte das stimmen.

WHEREIN((SELECTORDER BY time DESC LIMIT 6) UNION (SELECTORDER BY edited DESC LIMIT 6))

Danke erst einmal für den Denkanstoß.

Tschö, Auge

--
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett