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