我正在尝试返回产品表中未被当前用户添加的产品结果以及当前用户尚未审核的产品结果,然后按照评论最少的产品排序第一
tblUsers
:
UserID
1
2
3
tblProducts
:
ProductID UserID (created) NumberReviews
--------- ---------------- -------------
1 1 1
2 1 0
3 2 1
4 1 2
5 2 0
tblReviews
:
ReviewID UserID(reviewed) ProductID
-------- ---------------- ---------
1 2 4
2 1 3
3 3 4
4 3 1
因此对于2的当前用户,我想返回
Product ID
----------
2
1
我尝试了许多不同的左连接,但无济于事。有什么想法吗?
答案 0 :(得分:1)
尝试:
SELECT u.*, p.*, r.* FROM users u
LEFT JOIN products p ON p.userId <> u.userID
LEFT JOIN reviews r ON ( r.productId = p.ProductID AND r.UserID = u.userID)
GROUP BY p.productID ORDER BY p.NumberReviews
答案 1 :(得分:1)
SELECT p.*
, COUNT(r.ProductID) AS reviews
FROM tblProducts AS p
LEFT JOIN tblReviews AS r
ON r.ProductID = p.ProductID
WHERE UserID <> @currentUser
AND NOT EXISTS
( SELECT *
FROM tblReviews ru
WHERE ru.ProductID = p.ProductID
AND ru.UserID = @currentUser
)
GROUP BY p.ProductID
ORDER BY reviews ASC
如果您不想计算但使用字段NumberReviews
进行排序,则更简单:
SELECT p.*
FROM tblProducts AS p
WHERE UserID <> @currentUser
AND NOT EXISTS
( SELECT *
FROM tblReviews ru
WHERE ru.ProductID = p.ProductID
AND ru.UserID = @currentUser
)
ORDER BY NumberReviews ASC
答案 2 :(得分:0)
这些内容可能有用(sql server语法,不确定mysql)
Select productID
from Users u
-- all products not created by user
inner join Products p on p.UserID != u.UserID
-- that were reviewed by the user. NOT!
left outer join Reviews r on p.ProductID = r.ProductID and r.UserID = u.UserID
where r.ReviewID is null
and User = CurrentUser
答案 3 :(得分:0)
如果我没有错过任何内容:
SELECT
p.ProductID
FROM tblProducts p
LEFT JOIN tblReviews r ON p.ProductID = r.ProductID AND r.UserID = @UserID
WHERE p.UserID <> @UserID
AND r.ReviewID IS NULL
ORDER BY p.NumberReviews