MySQL não tem real noção de booleanos, e simplesmente mapeia
TRUE e FALSE aos valores numéricos 1 e 0 respectivamente. Neste caso
user_id <> ? retornará 0 para a maioria das linhas em sua tabela e 1 para as outras linhas. A ordem de classificação padrão é ASC , o que significa que provavelmente as linhas que você deseja estão na parte inferior do seu conjunto de resultados (0/FALSE venha antes 1/TRUE ). Tente modificar sua consulta para acomodar isso. ( user_id <> ? ) DESC, rating DESC, title
Supondo que esse seja realmente o problema, a compatibilidade entre bancos de dados pode ser alcançada com facilidade.
IF(user = ?, 0, 1), rating DESC, title