2017-07-14 36 views
0

我有一個表EVENT_COMMENTS和EVENT_COMMENTS_LIKES,一切正常,但我想檢查是否我已經喜歡該評論。所以我做了一個左連接與喜歡錶(具有外鍵(comment_id和user_id)),如果該user_id是我自己的ID我想輸出=真。MYSQL左連接(如果id是在其他表中,然後1其他0)

但它根本不工作。我的意思是我得到所有ID的ID.User_ID列表(我喜歡的數量),但我不能檢查我的ID是否在那裏。 在這種情況下是我的 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

感謝您的幫助:)

+3

在這種特殊情況下該錯誤消息說,這一切... – Shadow

+0

您ca'n't選擇列未參與聚集功能和... – scaisEdge

+1

林組沒有提到這麼愚蠢的,對不起,浪費你的時間。上帝這花了我一個多小時:/添加l.User_ID分組通過解決。 – Markus

回答

0

嘗試,包括在GROUP BY所有非集合列。在你的例子中,它們是:c.Comment_ID,c.Event_ID,c.User_ID

+0

OP的mysql版本更聰明一點,它不需要列出組中表c的任何其他字段,這些字段在功能上依賴於comnent_id – Shadow

-1

正如Shadow所說,錯誤消息包含解決方案。嘗試不設置sql_mode

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 

並重新運行查詢。

+0

不,不要這樣做。 – Shadow

0

如果每個用戶都可以像comnent只有一次,thenuse 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(),因此您將不會收到問題中顯示的錯誤消息。