file_logs
文件
published_ratings
我正在创建一个下载日志,需要显示用户评价的文件以及未评级的文件,这必须通过1个查询来完成。
我已经解决了这个问题,
SELECT
files.*,
IF(file_logs.user_id = published_file_ratings.author_id, TRUE, FALSE) AS rated
FROM file_logs
JOIN files
ON file_logs.file_id = files.id
LEFT JOIN published_file_ratings
ON file_logs.file_id = published_file_ratings.file_id
WHERE file_logs.user_id = 8
GROUP BY id
此查询的问题在于,如果首先出现错误的用户,则结果将是错误的。
结果应该是用户下载的所有文件的数组,其中包含“评级”列,描述他们是否对文件进行了评分。
任何帮助都非常赞赏。
答案 0 :(得分:2)
您需要将AND file_logs.user_id = published_file_ratings.author_id
添加到JOIN子句
您也可以将IF语句更改为IF(ISNULL(published_file_ratings.author_id), FALSE, TRUE)
此外,您现在可以删除GROUP BY以隐藏多个用户。以这种方式使用它是不正确的。
答案 1 :(得分:0)
您不能执行“GROUP BY id”,然后选择其余列。这没有意义。如果您尝试选择不在Group By中或包含在SUM(ColName)之类的聚合语句中的列,则除MySQL之外的任何其他DB都会引发错误。