MySQL nemá žádné skutečné pojem booleans a jednoduše mapy TRUE a FALSE na číselné hodnoty 1 a 0 respektive.
V tomto případě user_id <> ? vrátí 0 pro většinu řádků v tabulce a 1 pro ostatní řádky. Výchozí pořadí řazení je ASC , což s největší pravděpodobností znamená, že požadované řádky jsou dole vaší sady výsledků (0/FALSE přijít před 1/TRUE ). Zkuste upravit svůj dotaz, aby tomu vyhovoval.
( user_id <> ? ) DESC, rating DESC, title
Za předpokladu, že jde skutečně o tento problém, lze snadno dosáhnout kompatibility mezi databázemi.
IF(user = ?, 0, 1), rating DESC, title