MySQL không có thực khái niệm về boolean và đơn giản là ánh xạ TRUE và FALSE thành các giá trị số 1 và 0 một cách hiệu quả.
Trong trường hợp này user_id <> ? sẽ trả về 0 cho phần lớn các hàng trong bảng của bạn và 1 cho các hàng khác. Thứ tự sắp xếp mặc định là ASC , có nghĩa là rất có thể các hàng bạn muốn nằm ở dưới cùng trong bộ kết quả của bạn (0/FALSE đến trước 1/TRUE ). Hãy thử sửa đổi truy vấn của bạn để phù hợp với điều này.
( user_id <> ? ) DESC, rating DESC, title
Giả sử đây thực sự là vấn đề, có thể dễ dàng đạt được khả năng tương thích giữa các cơ sở dữ liệu.
IF(user = ?, 0, 1), rating DESC, title