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