2009-09-14 42 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會引發錯誤。

相關問題