MySQL nie ma rzeczywistości pojęcie wartości logicznych i po prostu mapuje TRUE i FALSE do wartości liczbowych 1 i 0 odpowiednio.
W tym przypadku user_id <> ? zwróci 0 dla większości wierszy w Twojej tabeli i 1 dla pozostałych wierszy. Domyślna kolejność sortowania to ASC , co oznacza, że według wszelkiego prawdopodobieństwa żądane wiersze znajdują się na dole zestawu wyników (0/FALSE przyjdź przed 1/TRUE ). Spróbuj zmodyfikować zapytanie, aby to uwzględnić.
( user_id <> ? ) DESC, rating DESC, title
Zakładając, że rzeczywiście jest to problem, zgodność między bazami danych można osiągnąć z łatwością.
IF(user = ?, 0, 1), rating DESC, title