好吧也许我想做的事情是不可能的,但它确实有意义。
我有3个表: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
添加另一个联接,我可以以某种方式使用我已经有SUM
票了吗?
换句话说,我是否可以获得一个额外的列,该列是否支持用户x是否已对此特定评论(行)进行投票,而不添加第三个联接?
答案 0 :(得分:1)
是和否。我更愿意与comments_ratings on c.id AND u.id = user in question
进行另一次联接,但是可以使用php或用于显示结果的任何其他语言来提取您需要进行简单检查的内容。使用GROUP_CONCAT
获取已对评论投票的所有ID字符串,然后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 ?,?