所以我在mysql数据库中得到了用户对项目的评分,我想知道最好的方法是检查一个项目列表是否已被用户评分。
第一种方式具有使用单个查询的好处,第二种方式不需要我拉取用户评价过的所有项目。哪一个更好?我是sql的新手,所以我不确定查询开销有多糟糕。此外,如果您有更好的建议,请随时提供。
根据要求,这是一个示例表。
CREATE TABLE ratings (
user id INT NOT NULL,
item_id INT NOT NULL,
rating INT NOT NULL
);
答案 0 :(得分:0)
如果您对每个项目使用单个查询,那么您将扫描/搜索ratings
这么多次您获得的项目。也许我错过了一些东西,但到目前为止我看不出它比用一个查询检查所有项目更好。
此外,对集合进行操作实际上是SQL最适合的,不是吗?
所以这是一个用于检查所有项目列表的示例查询。
SELECT
il.item_id,
CASE
WHEN r.item_id IS NULL THEN 'No'
ELSE 'Yes'
END AS IsRated
FROM itemlist il
LEFT JOIN ratings r ON il.item_id = r.item_id
AND rating > 0
AND user = @user
假设一个用户只能对一个项目进行一次评分,所以我不打算在此处删除重复项。