Mysql计数并连接多个文本行 - 可能吗?

时间:2014-11-10 14:28:46

标签: mysql string count textfield

我有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
谢谢你, Ñ

2 个答案:

答案 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
谢谢你们!