gpt4 book ai didi

MySQL充分利用连接

转载 作者:行者123 更新时间:2023-11-29 13:18:00 24 4
gpt4 key购买 nike

好吧,也许我想做的事情是不可能的,但它确实有意义。

我有 3 个表:userscommentscomments_ 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-ing 选票的?

换句话说,我可以在不添加第三个连接的情况下获得一个附加列来保存用户 x 是否对该特定评论(行)进行了投票吗?

最佳答案

是和否。我更愿意对 c.id AND u.id = user in question 进行另一次连接,但是可以提取您需要的内容,以便使用 php 或您使用的任何其他语言进行简单检查用于显示结果。使用GROUP_CONCAT获取对评论进行投票的所有ID的字符串,然后将其分解数组以供引用。

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 ?,?

关于MySQL充分利用连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com