MySQL non ha un reale nozione di booleani e semplicemente mappe TRUE e FALSE ai valori numerici 1 e 0 rispettivamente.
In questo caso user_id <> ? restituirà 0 per la maggior parte delle righe nella tabella e 1 per le altre righe. L'ordinamento predefinito è ASC , il che significa che con ogni probabilità le righe desiderate si trovano in fondo del tuo set di risultati (0/FALSE vieni prima 1/TRUE ). Prova a modificare la tua query per soddisfare questo.
( user_id <> ? ) DESC, rating DESC, title
Supponendo che questo sia effettivamente il problema, la compatibilità tra database può essere raggiunta facilmente.
IF(user = ?, 0, 1), rating DESC, title