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