MySQL har ingen riktig begreppet booleaner, och bara mappar TRUE och FALSE till de numeriska värdena 1 och 0 respektive.
I det här fallet user_id <> ? returnerar 0 för majoriteten av raderna i din tabell och 1 för de andra raderna. Standardsorteringsordningen är ASC , vilket med all sannolikhet innebär att raderna du vill ha är nedtill av din resultatuppsättning (0/FALSE kom före 1/TRUE ). Försök att modifiera din fråga för att klara detta.
( user_id <> ? ) DESC, rating DESC, title
Förutsatt att detta verkligen är problemet, kan korsdatabaskompatibilitet uppnås med lätthet.
IF(user = ?, 0, 1), rating DESC, title