2

我有一个数据库,里面有我在电影院看过的所有电影。它由几个表组成:

  • 放映(主表,日期,电影院,电影等)
  • 电影(有关电影的所有信息:标题、导演、长度......)
  • 电影院(有关我观看的电影院的信息,在我的示例中未使用)
  • 标签(连接到电影字段的标签:id,标签)
  • tag_scr(链接表将标签链接到筛选,字段:scr_id,tag_id)

大多数放映都连接一个标签(可以是电影节、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

除了在结果中多次列出具有多个标签的筛选之外,这就是我所需要的。如果我按screenings.id 分组,我只会在每次放映时获得第一个标签。是否可以使用 concat 函数、子查询或任何其他方法来做我想做的事?我的数据库是 MySQL 5.5.24。

4

1 回答 1

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

祝你好运。

于 2013-02-10T22:23:52.060 回答