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