MySQL tidak memiliki nyata gagasan boolean, dan cukup memetakan TRUE dan FALSE ke nilai numerik 1 dan 0 secara bergantian.
Dalam hal ini user_id <> ? akan mengembalikan 0 untuk sebagian besar baris di tabel Anda dan 1 untuk baris lainnya. Urutan pengurutan default adalah ASC , artinya kemungkinan besar baris yang Anda inginkan berada di bawah dari kumpulan hasil Anda (0/FALSE datang sebelum 1/TRUE ). Coba ubah kueri Anda untuk mengakomodasi ini.
( user_id <> ? ) DESC, rating DESC, title
Dengan asumsi ini memang masalahnya, kompatibilitas lintas-basis data dapat dicapai dengan mudah.
IF(user = ?, 0, 1), rating DESC, title