MySQL-SELECT。在行中多次追加字段

MySQL-SELECT。在行中多次追加字段,mysql,Mysql,假设我有一张桌子: +-----------+-------+ | name | seat | +-----------+-------+ | Andrew | 1 | | Andrew | 5 | | Andrew | 15 | | Billy | 2 | | Billy | 5 | +-----------+-------+ 每个名称是否有办法选择座椅的相应匹配项,并将它们附加到一行中 期望输出: +---

假设我有一张桌子:

+-----------+-------+
| name      | seat  |
+-----------+-------+
| Andrew    | 1     |
| Andrew    | 5     |
| Andrew    | 15    |
| Billy     | 2     |
| Billy     | 5     |
+-----------+-------+
每个
名称
是否有办法选择
座椅
的相应匹配项,并将它们附加到一行中

期望输出:

+-----------+-------+-------+-------+
| name      | seat1 | seat2 | seat3 |
+-----------+-------+-------+-------+
| Andrew    | 1     | 5     | 15    |
| Billy     | 2     | 5     | NULL  |
+-----------+-------+-------+-------+



我用
组尝试了一个简单的
选择

SELECT `name`, seat
FROM users
GROUP BY `name`
ORDER BY `name`;

但它当然会为每个名字输出一列
seat

+-----------+-------+
| name      | seat  |
+-----------+-------+
| Andrew    | 1     |
| Billy     | 2     |
+-----------+-------+


这可能吗?怎么可能?

因为您使用的是分组方式

你需要聚合函数

组_concat是您可能必须使用的组

  select name, group_concat(seat, SEPARATOR ",") from ...
它应该产生类似于

  +-----------+-------+
  | name      | seats |
  +-----------+-------+
  | Andrew    | 1,5,15|
  | Billy     | 2,5   |
  +-----------+-------+
当然,它是一个单列,其中的所有字符串由分隔符字符串分隔,而不是多个列,但希望这将是有用的/可用的

否则,您可能需要执行更多的字符串操作来多次使用include组_concat(seat,SEPARATOR“,”),并以某种方式解析其中的位置,例如

    select SUBSTRING_INDEX(group_concat(seat, SEPARATOR ","), ",",1), SUBSTRING_INDEX(group_concat(seat, SEPARATOR ","), ",",2), SUBSTRING_INDEX(group_concat(seat, SEPARATOR ","), ",",3) from ....
当然,这也不完全是你想要得到的——我不知道如何使所选列的数量成为动态的


希望这能有所帮助

是的,这是可能的,它被称为旋转结果。MySql不支持pivot语句,因此需要使用一个准备好的语句。这里有一个例子:一般来说,最好在表示层中处理显示逻辑——假设您有that@sgeddes谢谢你提供的信息,我不知道它是那样叫的。我总是说,使用正确的关键字可以得到正确的信息。问题在于知道它们是什么:DIt可以动态化。其他地方也有介绍,但有点乏味。是的,这很有帮助。我甚至不认为这些字段可以连在一起。受你的启发,我尝试了一些更复杂的东西,比如
GROUP_CONCAT(CONCAT(column1,'some string',column2)分隔符“
”)
,它非常适合我。