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