2013-02-16 46 views
0

我有一個工作得很好的查詢。讓我從它開始:向SQL中的查詢添加子查詢

編輯: SQL已更新。我每行都得到0

SELECT i.item, i.user_id, u.username, 
     (COALESCE(r.ratetotal, 0)) AS total, 
     (COALESCE(c.commtotal, 0)) AS comments, 
     (COALESCE(r.rateav, '50%')) AS rate, 
     (COALESCE(x.wasRated, '0')) AS wasRated 
     FROM items AS i 
     LEFT JOIN master_cat AS c 
      ON (c.cat_id = i.cat_id) 
     LEFT JOIN users AS u 
     ON u.user_id = i.user_id  
     LEFT JOIN 
      (SELECT item_id, 
      COUNT(item_id) AS ratetotal, 
      AVG(rating) AS rateav 
      FROM ratings GROUP BY item_id) AS r 
     ON r.item_id = i.item_id 
     LEFT JOIN 
      (SELECT item_id, 
      COUNT(item_id) AS commtotal 
      FROM reviews GROUP BY item_id) AS c 
     ON c.item_id = i.item_id 
     LEFT JOIN 
      (SELECT xu.user_id, ra.item_id, '1' AS wasRated 
      FROM users AS xu 
      LEFT JOIN ratings AS ra 
       ON ra.user_id = xu.user_id 
      WHERE xu.user_id = '1') AS x 
     ON x.user_id = u.user_id 
       AND x.item_id = r.item_id 
     WHERE c.category = 'Movies' 
     ORDER by i.item ASC; 

我需要一個更多的功能添加到它,在那裏你看到AS x

基本上,這裏有三個表是很重要的。 items,reviewsratings。在頂部,您會看到有子查詢正在統計諸如每個項目的平均值和總計。

我需要一個連接到user_id,item_idrate_id(在ratings)的最終查詢。在最終的結果中,它列出了每個項目和統計數據,我想再列一個列,如果登錄用戶對它進行了評分,那麼這個列是簡單的true或false。所以,我需要的是這樣的:

SELECT ??? 
FROM ratings AS r 
WHERE r.user_id = '{$user_id}' 

(的登錄用戶user_id從PHP.`傳遞)

我怎樣才能使一個子查詢,讓我的信息的最後一點,但把它在父查詢中的每一行項目?

+0

如果您發佈表的SQL DDL以及一些SQL INSERT語句,您可能會得到更多的回覆。 – 2013-02-16 22:33:26

回答

1

將此添加到父查詢中。

, coalesce(x.WasRated, 'false') as WasRated 

你的X子查詢:

(select users.user_id 
, ratings.item_id 
, 'true' WasRated 
from users join ratings on user.user_id = ratings.user_id 
where users.user_id = the one for the logged in user 
) x on x.user_id = users.user_id 
and x.item_id = ratings.item_id 

或類似的東西。

+0

我已根據您的提交更新了我的代碼,並且還包含了結果。有什麼想法嗎? – KickingLettuce 2013-02-17 02:56:20

+1

我的建議是從用戶到子查詢中的評分進行內部連接。你有一個左連接。我的意圖是,如果用戶評價一個項目,子查詢將返回「真」。主查詢中的coalesce函數如果沒有,則會將其更改爲false。在子查詢中加入左連接將使其對每個用戶都返回true。 – 2013-02-17 03:59:15

+0

我只是將它改爲內連接,並做了一些非常小的調整,並使其工作!標記正確,謝謝! – KickingLettuce 2013-02-18 18:52:09