行存在是另一个表吗?

时间:2009-09-14 19:58:25

标签: sql mysql


file_logs

  • 的file_id
  • USER_ID

文件

  • ID
  • 名称
  • 等...

published_ratings

  • AUTHOR_ID
  • 的file_id
  • 评论
  • 等...

方案


我正在创建一个下载日志,需要显示用户评价的文件以及未评级的文件,这必须通过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

此查询的问题在于,如果首先出现错误的用户,则结果将是错误的。

结果应该是用户下载的所有文件的数组,其中包含“评级”列,描述他们是否对文件进行了评分。

任何帮助都非常赞赏。

2 个答案:

答案 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都会引发错误。