Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在一个查询中连接多行_Mysql_Performance - Fatal编程技术网

Mysql 在一个查询中连接多行

Mysql 在一个查询中连接多行,mysql,performance,Mysql,Performance,我有两张设计如下的桌子 电影:ID、名称 类型:电影id,类型 每部电影可以有多个流派 我希望列出所有电影及其类型,因此我会得到如下内容: name1 genre1,genre2,genre3 name2 genre2,genre6,genre8 等等 我希望能够使用一个查询(我使用的是MySQL 5.6)完成这项工作 我曾考虑过使用concatenate,但无法使它真正起作用。有什么想法吗?为您提问 select m.name, group_concat(g.genre) from mo

我有两张设计如下的桌子

  • 电影
    :ID、名称
  • 类型
    :电影id,类型
每部电影可以有多个流派

我希望列出所有电影及其类型,因此我会得到如下内容:

name1 genre1,genre2,genre3
name2 genre2,genre6,genre8
等等

我希望能够使用一个查询(我使用的是MySQL 5.6)完成这项工作

我曾考虑过使用concatenate,但无法使它真正起作用。有什么想法吗?

为您提问

select m.name, group_concat(g.genre) from movies m, genres g
where m.id = g.movie_id group by m.name;
以下是一些示例数据:

mysql> create table movies (id int, name varchar(100));
Query OK, 0 rows affected (0.04 sec)

mysql> create table genres (movie_id int, genre varchar(100));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into movies values (1, 'Terminator');
Query OK, 1 row affected (0.01 sec)

mysql> insert into movies values (2, 'Lord of the Rings');
Query OK, 1 row affected (0.01 sec)

mysql> insert into genres values (1, 'action');
Query OK, 1 row affected (0.01 sec)

mysql> insert into genres values (1, 'sci-fi');
Query OK, 1 row affected (0.01 sec)

mysql> insert into genres values (2, 'fantasy');
Query OK, 1 row affected (0.00 sec)

mysql> insert into genres values (2, 'adventure');
Query OK, 1 row affected (0.01 sec)
以下是查询的输出:

mysql> select m.name, group_concat(g.genre) from movies m, genres g where m.id = g.movie_id group by m.name;
+-------------------+-----------------------+
| name              | group_concat(g.genre) |
+-------------------+-----------------------+
| Lord of the Rings | adventure,fantasy     |
| Terminator        | sci-fi,action         |
+-------------------+-----------------------+

您应该进一步规范化您的表。添加带有电影id、流派id和单独表格流派的表格电影2Genre。@JensW。如果你看这个问题,它是标准化的<代码>电影表具有
(ID,名称)
,而
类型
具有
(电影ID,类型)
。这是未规范化的。每个流派名称将被存储多次。