我有2个表,一个有用户评论, 另一个单击“我喜欢”按钮
的列表TABLE COMMENTS
id | comment | data
---|---------|------
1 | blabla | 12345
2 | hello | 12345
3 | hi | 12345
4 | test | 12345
5 | yuhuu | 12345
6 | dunno | 12345
7 | hello | 12345
8 | blabla | 12345
9 | test | 12345
TABLE ILIKE
id | comment_id | name
---|------------|------
1 | 5 | Peter
2 | 8 | Tim
3 | 5 | Joe
4 | 5 | Peter
5 | 3 | Joe
6 | 8 | Joe
7 | 8 | Peter
8 | 5 |
9 | 3 | Joe
10 | 2 |
11 | 2 |
现在,我会计算每个评论中我喜欢的人数...... 显示评论人员的用户名列表...
所以结果表应该......就像那样:
TABLE RESULT
id | comment | data | totlike | from_names
---|---------|-------|---------|--------
1 | blabla | 12345 | 0 |
2 | hello | 12345 | 2 |
3 | hi | 12345 | 2 | Joe
4 | test | 12345 | 0 |
5 | yuhuu | 12345 | 4 | Joe, Peter //double name appears just one time
6 | dunno | 12345 | 0 |
7 | hello | 12345 | 0 |
8 | blabla | 12345 | 3 | Joe, Peter, Tim //if possible order in alphabetic order
9 | test | 12345 | 0 |
如果可能,我不想要重复的名字 我试试这里,但我可以做计数工作人员,但不是“连接字符串”部分......
http://sqlfiddle.com/#!2/0c9b1d/2
谁能解决这个问题?
SELECT comments.id, comments.comment, count(ilike.id) as count
FROM comments
LEFT JOIN ilike on ilike.comment_id=comments.id
WHERE 1 GROUP BY comments.id
谢谢你,
Ñ
答案 0 :(得分:0)
尝试使用
GROUP_CONCAT(ILIKE.name ORDER BY ILIKE.name)
创建以逗号分隔的列表。
另外,要小心。您正在使用GROUP BY的非标准MySQL扩展。您似乎正确使用它,但查询中的任何更改都可能会改变它。如果您切换到
GROUP BY comments.id, comments.comment
您将不再依赖该扩展名。
答案 1 :(得分:0)
解决!
SELECT comments.id, comments.comment, count(ilike.id) as count,
GROUP_CONCAT(DISTINCT NULLIF(ILIKE.name,'') ORDER BY ILIKE.name) as from_names
FROM comments
LEFT JOIN ilike on ilike.comment_id=comments.id
WHERE 1 GROUP BY comments.id, comments.comment
谢谢你们!