电影列表的复杂sql查询

时间:2013-02-10 22:14:49

标签: mysql sql join

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

  • 放映(主表,日期,电影,电影等)
  • 电影(有关电影的所有信息:标题,导演,长度......)
  • 电影院(关于我看过它的电影院的信息,在我的例子中没有使用过)
  • 标签(连接到电影字段的标签:id,tag)
  • 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

除了带有多个标签的放映在结果中多次列出,这就是我需要的。如果我按筛选分组。我只在每次筛选时得到第一个标签。是否可以使用concat函数,子查询或任何其他方法来执行我想要的操作?我的数据库是MySQL 5.5.24。

1 个答案:

答案 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

祝你好运。