2011-01-06 15 views
0

Ist es möglich, wenn/then Anweisungen in mySQL? Ich möchte den Wert einer Spalte in einer JOIN-Tabelle überprüfen und die Ergebnisse basierend auf dem Wert dieser Spalte ordnen.MySql wenn dann Abfrage

Meine Entschuldigung Versuch:

SELECT t1.* 
FROM t1 
JOIN t2 ON t1.ID = t2.ID 
WHERE t1.ID = '888' 
if(t2.col1 = '1') ORDER BY t1.tid ASC 
else ORDER BY RAND() 

Antwort

1

können Sie CASE verwenden:

ORDER BY 
    CASE WHEN t2.col1 = 1 THEN t1.tid ELSE rand() END ASC 

Passen Sie die Leistung nicht so gut sein kann, wie MySQL nicht in der Lage sein, einen Index zu verwenden für die Bestellung t1.tid.

Sie sich auch bewusst sein sollte, dass Sie durch mehrere Dinge bestellen können, so dass möglicherweise wird dies tun, was Sie wollen:

ORDER BY t1.tid ASC, RAND() 

Außerdem sollten Sie bedenken, dass ORDER BY RAND() LIMIT 1 wird jede Zeile tatsächlich holen, berechnen für jede eine Zufallszahl, sortiere sie, dann gib endlich die erste Zeile zurück. Also auf Daten einer vernünftigen Größe wird es langsam sein (und auch in temporären Tabellen resultieren).