MySQL няма реален понятие за булеви и просто преобразува TRUE и FALSE към числовите стойности 1 и 0 съответно.
В този случай user_id <> ? ще върне 0 за повечето редове във вашата таблица и 1 за останалите редове. Редът на сортиране по подразбиране е ASC , което означава, че по всяка вероятност редовете, които искате, са в дъното от вашия набор от резултати (0/FALSE елате преди 1/TRUE ). Опитайте да модифицирате заявката си, за да приемете това.
( user_id <> ? ) DESC, rating DESC, title
Ако приемем, че това наистина е проблемът, съвместимостта между бази данни може да бъде постигната с лекота.
IF(user = ?, 0, 1), rating DESC, title