希望我可以毫不犹豫地问这个问题。我是一名摄影师,我正在为一些客户评价我们拍摄的照片。我们的投资组合中有数百张图片可供评级。我想要做的是让我们的客户再次评价图片,但只向他们展示他们尚未评级的图片。我目前有三个表:一个存储实际评级,一个存储图片(或每个图片的位置),一个存储有关评估者的信息。我正在使用codeigniter进行数据库管理,如果这有帮助的话。到目前为止我所拥有的是:
“SELECT * FROM rating LEFT JOIN portfolio ON ratings.portfolioid = portfolio.portfolioid”
这将为每个评分提供一行,但不会显示图片缺少评分的位置。提前谢谢!
答案 0 :(得分:1)
SELECT * FROM portfolio WHERE NOT EXISTS ( SELECT * FROM ratings where ratings.portfolioid = portfolio.portfolioid )
SELECT * FROM portfolio LEFT JOIN ratings ON portfolio.portfolioid = ratings.portfolioid WHERE ratings.portfolioid IS NULL
两者都应该给你没有评级的那些。
答案 1 :(得分:1)
@ChrisV - 您可以避免使用此版本进行子选择:
SELECT * FROM portfolio p
LEFT OUTER JOIN rating r ON r.portfolioid = p.portfolioid AND r.email = 'test@test.com'
WHERE r.portfolioid IS NULL
这是OUTER JOIN的美丽与额外的条件。在连接之前应用额外条件。它只会将投资组合加入与额外条件匹配的评级(AND r.email = ...),因此如果评级不存在,则表示'test@test.com'未对该投资组合进行评级。< / p>
答案 2 :(得分:0)
我现在无法测试它,但是这样的事情可以做到这一点:
SELECT * FROM portfolio LEFT JOIN (
SELECT portfolioid FROM rating WHERE email = "test@test.com"
) AS rated USING (portfolioid)
WHERE rated.portfolioid IS NULL