我有一个工作得很好的查询。让我从它开始:向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
,reviews
和ratings
。在顶部,您会看到有子查询正在统计诸如每个项目的平均值和总计。
我需要一个连接到user_id
,item_id
和rate_id
(在ratings
)的最终查询。在最终的结果中,它列出了每个项目和统计数据,我想再列一个列,如果登录用户对它进行了评分,那么这个列是简单的true或false。所以,我需要的是这样的:
SELECT ???
FROM ratings AS r
WHERE r.user_id = '{$user_id}'
(的登录用户user_id
从PHP.`传递)
我怎样才能使一个子查询,让我的信息的最后一点,但把它在父查询中的每一行项目?
如果您发布表的SQL DDL以及一些SQL INSERT语句,您可能会得到更多的回复。 – 2013-02-16 22:33:26