2009-09-14 41 views
0


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

你需要添加AND file_logs.user_id = published_file_ratings.author_id到您的JOIN子句

你也可以改变你的IF语句IF(ISNULL(published_file_ratings.author_id), FALSE, TRUE)

还,你现在可以卸下GROUP BY隐藏多个用户。它在这里以这种方式使用是不正确的。

+0

完美,非常感谢*。 – 2009-09-14 20:23:50

0

你不能做“GROUP BY ID”,然后选择其余的列。这没有意义。如果您尝试选择不在分组依据中,或者包含在聚合语句(如SUM(ColName)中)的任何其他数据库,则MySQL会引发错误。

相关问题