【发布时间】:2011-08-29 01:34:18
【问题描述】:
我已经修改了一段时间的查询,阅读了这个精彩网站上的许多帖子,以了解我目前的情况。但是,唉,现在我被困住了:(
我设计的这个查询和数据库的相关部分类似于 youtube 评论点赞系统。相关表格和字段是:
美国海军陆战队
usr_id int (PK)
评论
comment_id int (PK)
usr_id int (FK) 引用 usr(usr_id)
topic_id int (FK) 引用主题(topic_id)
描述 varchar
创建了 varchar
COMMENT_LIKERS
comment_id int (PK) (FK) 引用 cmets(comment_id)
usr_id int (PK) (FK) 引用 usrs(usr_id)
喜欢tinyint
我希望能够在一个查询中选择所有相关数据。除了每条评论的一般数据外,我还想统计每条评论的所有喜欢和不喜欢的情况。到目前为止,我的查询是计算所有 cmets 的点赞数,而不是每个 cmets 的点赞数,即使我有 LEFT JOIN with ON 子句:cmets.comment_id = comment_likers.comment_id。
我正在学习 MySql 和 PHP,所以如果我做了一些愚蠢的事情,请放心。我向你保证,我已经四处寻找答案的线索。
这里是查询:
SELECT comments.comment_id, comments.descr, comments.created, usrs.usr_name,
COUNT(if(comment_likers.liker = 1, 1, null)),
COUNT(if(comment_likers.liker = 0, 1, null)),
comment_likers2.liker
FROM comments
INNER JOIN usrs ON ( comments.usr_id = usrs.usr_id )
LEFT JOIN comment_likers ON ( comments.comment_id = comment_likers.comment_id )
LEFT JOIN comment_likers AS comment_likers2 ON ( comments.comment_id = comment_likers.comment_id AND comment_likers.usr_id = $usrID )
WHERE comments.topic_id = $tpcID
GROUP BY comments.comment_id
ORDER BY comments.created DESC
提前致谢
【问题讨论】:
-
我不认为这是你的问题,但我会在 where 子句中而不是 join 中放置“ AND comment_likers.usr_id = $usrID”。
-
我不知道我是不是发疯了,盯着这段代码太久了......但我知道你的意思,我已经将其他查询中的类似 AND 切换到 WHERE子句没有明显区别,但我只是尝试使用这个,查询甚至不起作用......没有找到 cmets
-
我应该在我的评论中添加这个链接,我在寻找这个项目的答案时偶然发现了这个链接:techstumbler.blogspot.com/2008/04/mysql-join-with-count.html我现在就去睡觉,希望明天有答案和一个新的头脑
标签: mysql count aggregate-functions