繁体   English   中英

我怎样才能得到这个结果?

[英]How can I get this result?

例如我有桌子

+----+---------+
| gid|  name   |
+----+---------+
|  1 | stan    |
|  1 | kyle    |
|  2 | kenny   |
|  3 | cartman |
|  3 | john    |
|  3 | myley   |
+----+---------+ 

我需要这个结果:

+----+-------------+
|  1 |  2  |  3    |
|stan|kenny|cartman|
|kyle|null |john   | 
|null|null |myley  |
+----+-------------+ 

作为数组:

[
 [1,2,3],
 [stan,kenny, cartman],
 [kyle, null, john],  
 [null,null,myley]
]

如果在 MYSQL 中不可能,那么如何在 PHP 中使用 arrays 来做到这一点? 谢谢

如果你有 mysql 8 你可以使用第一个

但是当你有一个灵活数量的 guis 时,你可以使用第二个,它构成了一个 pivot 表

CREATE TABLE table1 ( `gid` INTEGER, `name` VARCHAR(7) ); INSERT INTO table1 (`gid`, `name`) VALUES ('1', 'stan'), ('1', 'kyle'), ('2', 'kenny'), ('3', 'cartman'), ('3', 'john'), ('3', 'myley');
 SELECT MAX(IF (`gid` = 1, `name`, NULL)) as '1', MAX(IF (`gid` = 2, `name`, NULL)) as '2', MAX(IF (`gid` = 3, `name`, NULL)) as '3' FrOM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY `gid` ) row_num FROM table1) t1 GROUP BY row_num
  1 |  2 |  3:--- |:---- |:------- 斯坦 | 肯尼 | 卡特曼凯尔 |  null | 约翰null |  null | 麦莉
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF (`gid` = "', `gid`,'", `name`,"")) AS "',gid,'"') ) INTO @sql FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY `gid` ) row_num FROM table1) t1; SET @sql = CONCAT('SELECT ', @sql, ' FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY `gid` ) row_num FROM table1) t1 GROUP BY row_num '); #SELECT @sql; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE stmt;
  1 |  2 |  3:--- |:---- |:------- 斯坦 | 肯尼 | 卡特曼凯尔 |  | 约翰 |  | 麦莉

db<> 在这里摆弄

这种可能在应用程序端可能会更好地处理......但是在 SQL 中是可行的,使用 window 函数(在 MySQL 8.0 中可用):

select
    max(case when gid = 1 then name end) name1,
    max(case when gid = 2 then name end) name2,
    max(case when gid = 3 then name end) name3
from (
    select t.*, row_number() over(partition by gid order by name) rn
    from mytable t
) t
group by rn

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM