Tôi có một bảng các hạng mục tài sản, và một bảng user_favorites có cấu trúc như thế này:MySQL - một subquery và một ĐÂU TRÊN
- id
- item_id
- user_id
- yêu thích (bool)
Khi người dùng "yêu thích" mục, nó thêm hàng vào bảng này bằng id mục, id người dùng và đặt thuộc tính yêu thích thành 1 (nếu họ "không thích e "nó được đổi thành 0).
Tôi đang cố gắng tìm hiểu cách hiển thị các mục yêu thích của người dùng khi họ xem danh sách sản phẩm.
Tôi hiện đang thực hiện truy vấn dựa trên đầu vào tìm kiếm của người dùng và nhận được một mảng ID sản phẩm. Bây giờ tôi muốn làm một truy vấn trong số các sản phẩm đó để tạo ra một bảng thông tin sản phẩm - và tôi muốn nó bao gồm có hay không mục đó là một yêu thích của người dùng.
Tôi đã thử một cái gì đó như thế này:
select i.tid, i.name as name, i.image as image, (SELECT favorite FROM user_favorites WHERE user_id=77) as favorite
FROM items i
left join user_favorites ufav on (ufav.item_id = i.tid)
WHERE i.tid IN (79, 98, 105 . . .)
order by favorite DESC, name ASC
..nhưng tất nhiên tôi nhận được một Subquery trả hơn 1 hàng lỗi
Tôi cũng đã thử một cái gì đó như thế này:
select i.tid, i.name as name, i.image as image, ufav.favorite as favorite
FROM items i
left join user_favorites ufav on (ufav.item_id = i.tid)
WHERE i.tid IN (79, 98, 105 . . .) AND ufav.user_id=77
order by favorite DESC, name ASC
. . . nhưng điều này chỉ trả về các mục được ưu tiên (như bạn mong đợi). Tôi muốn trả lại tất cả các mục trong danh sách ID, nhưng tôi cũng muốn biết mục nào chưa được "ưa thích".
Tôi có thể thực hiện việc này trong một truy vấn hay là tùy chọn tốt nhất để chạy hai truy vấn riêng biệt?
Cảm ơn bạn đã trả lời Sashi, nhưng John Woo là chính xác: Tôi cũng cần các mục không được ưa thích để hiển thị trong kết quả. – Zarwell