我有一个表EVENT_COMMENTS和EVENT_COMMENTS_LIKES,一切正常,但我想检查我是否已经喜欢这个评论。所以我使用likes表进行左连接(有外键(comment_id和user_id)),如果那个user_id是我自己的id,我想输出= true。
但它根本不起作用。我的意思是我得到所有ID的l.User_ID列表(我计算了喜欢的数量),但我无法检查我的ID是否在那里。 54 在这种情况下是我的 ID。
SELECT c.Comment_ID,c.Event_ID,c.User_ID,count(l.User_ID) as amount_likes,
(case l.User_ID when 54 THEN 'true' ELSE 'false' END) as is_liked
FROM EVENT_COMMENTS c
left join USERINFO u on u.USERID=c.User_ID
left join EVENT_COMMENTS_LIKES l on l.Comment_ID = c.Comment_ID
WHERE Event_ID=121514
GROUP BY c.Comment_ID
ORDER BY updated_time DESC
粗体的是棘手的。
This is the error: Expression #10 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'markusp.l.User_ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
感谢您的帮助:)
答案 0 :(得分:0)
尝试在GROUP BY中包含所有非聚合列。在您的示例中,它们将是:c.Comment_ID,c.Event_ID,c.User_ID
答案 1 :(得分:0)
如果每个用户只能使用一次comnent,那么使用condtional计数代替(case l.User_ID when 54 THEN 'true' ELSE 'false' END) as is_liked
表达式:
sum(l.User_ID = 54) as is_liked
l.User_ID = 54
评估为真或假(1或0),每个评论总结一次。
由于您使用聚合函数sum()
,因此您不会收到问题中显示的错误消息。
答案 2 :(得分:-1)
正如Shadow所说,错误消息包含解决方案。尝试取消设置SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
{{1}}
重新运行查询。