MySQL n'a pas de réel notion de booléens, et mappe simplement TRUE et FALSE aux valeurs numériques 1 et 0 respectivement.
Dans ce cas user_id <> ? renverra 0 pour la majorité des lignes de votre tableau et 1 pour les autres lignes. L'ordre de tri par défaut est ASC , ce qui signifie selon toute vraisemblance que les lignes que vous voulez sont en bas de votre jeu de résultats (0/FALSE venir avant 1/TRUE ). Essayez de modifier votre requête pour tenir compte de cela.
( user_id <> ? ) DESC, rating DESC, title
En supposant que c'est bien le problème, la compatibilité entre les bases de données peut être obtenue facilement.
IF(user = ?, 0, 1), rating DESC, title