好吧,也许我想做的事情是不可能的,但这是有道理的。
我有三张桌子:users
,comments
和comments_ratings
。在comments_ratings cr
中,我保存注释的id、用户的id和他们给出的投票,对于他们投票的每一个评论。我现在要做的是弄清楚用户是否对查询返回的每个评论进行了投票。
SELECT
c.*,
u.name as authorName,
SUM(cr.vote) AS rating
FROM comments c
LEFT JOIN users u ON u.id = c.author
LEFT JOIN comments_ratings cr ON c.id = cr.comment
WHERE c.id <= ?
GROUP BY c.id
ORDER BY c.id DESC
LIMIT ?,?
因此,这会将每个注释作为一个单独的行返回(难以置信),但是与其向cr
添加另一个join以确定当前用户是否已经对每个注释进行了投票,我还能以某种方式使用我已经拥有的一个-- SUM
-ing --投票吗?
换句话说,我是否可以得到一个额外的列来保存用户x是否对这个特定的注释(行)进行投票,而不添加第三个联接?
发布于 2014-01-19 15:05:38
是也不是。我更愿意使用comments_ratings on c.id AND u.id = user in question
进行另一次连接,但是可以使用php或显示结果所用的任何其他语言提取所需的简单检查。使用GROUP_CONCAT
获取对注释进行表决的所有it的字符串,然后将其explode
到array
以供参考。
SELECT
c.*,
u.name as authorName,
SUM(cr.vote) AS rating,
GROUP_CONCAT(cr.user_id) AS user_ids
FROM comments c
LEFT JOIN users u ON u.id = c.author
LEFT JOIN comments_ratings cr ON c.id = cr.comment
WHERE c.id <= ?
GROUP BY c.id
ORDER BY c.id DESC
LIMIT ?,?
https://stackoverflow.com/questions/21223698
复制相似问题