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