Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwendung eines booleschen Ausdrucks in der Order by-Klausel

MySQL hat kein real Vorstellung von booleschen Werten und bildet einfach TRUE ab und FALSE zu den numerischen Werten 1 und 0 bzw..

In diesem Fall user_id <> ? gibt 0 für die meisten Zeilen in Ihrer Tabelle und 1 für die anderen Zeilen zurück. Die Standardsortierreihenfolge ist ASC , was bedeutet, dass die gewünschten Zeilen aller Wahrscheinlichkeit nach unten stehen Ihrer Ergebnismenge (0/FALSE komm vorher 1/TRUE ). Versuchen Sie, Ihre Abfrage entsprechend zu ändern.

( user_id <> ? ) DESC, rating DESC, title

Unter der Annahme, dass dies tatsächlich das Problem ist, kann die datenbankübergreifende Kompatibilität problemlos erreicht werden.

IF(user = ?, 0, 1), rating DESC, title