我有一个数据库,里面有我在电影院看过的所有电影。它由几个表组成:
大多数放映都连接了一个标签(可以是电影节,3D,首映,现场音乐等),但放映也可以有零标签或多个标签,所以我要做的是创建一个查询在那里我列出了所有的筛选,并且连接到该筛选的所有标签连接到一个带有逗号的字符串。我的查询现在看起来像这样:
SELECT screenings.id, movies.title, tags.tag FROM screenings
JOIN movies ON screenings.ft = movies.id
LEFT JOIN tag_scr ON screenings.id = tag_scr.scr_id
LEFT JOIN tags ON tag_scr.tag_id = tags.id
除了带有多个标签的放映在结果中多次列出,这就是我需要的。如果我按筛选分组。我只在每次筛选时得到第一个标签。是否可以使用concat函数,子查询或任何其他方法来执行我想要的操作?我的数据库是MySQL 5.5.24。
答案 0 :(得分:0)
是的,您需要使用GROUP_CONCAT
:
SELECT screenings.id, movies.title, GROUP_CONCAT(tags.tag SEPARATOR ',') tags
FROM screenings
JOIN movies ON screenings.ft = movies.id
LEFT JOIN tag_scr ON screenings.id = tag_scr.scr_id
LEFT JOIN tags ON tag_scr.tag_id = tags.id
GROUP BY screenings.id, movies.title
默认情况下,您并不需要SEPARATOR语法,它是逗号。
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
祝你好运。