Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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_Group By_Group Concat - Fatal编程技术网

Mysql 需要合并字段并获得唯一的行

Mysql 需要合并字段并获得唯一的行,mysql,group-by,group-concat,Mysql,Group By,Group Concat,我有一个包含+100万行的数据库,其结构如下所示: CREATE TABLE IF NOT EXISTS `Performance` ( `id` int(11) NOT NULL AUTO_INCREMENT, `CIDs` varchar(100) DEFAULT NULL, `COLOR` varchar(100) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, `XT` bigint(16) DEFAULT NULL,

我有一个包含+100万行的数据库,其结构如下所示:

CREATE TABLE IF NOT EXISTS `Performance` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `CIDs` varchar(100) DEFAULT NULL,
  `COLOR` varchar(100) DEFAULT NULL,
  `Name` varchar(255) DEFAULT NULL,
  `XT` bigint(16) DEFAULT NULL,
  `MP` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `CIDs` (`CIDs`),
  KEY `COLOR` (`COLOR`),
  KEY `Name` (`Name`),
  KEY `XT` (`XT`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

INSERT into `Performance` (`id`, `CIDs`, `COLOR`, `Name`, `XT`, `MP`) 
VALUES
(1, '1253374160', 'test test test test test', 'Load1', '89421331221', ''),
(2, '1271672029', NULL, 'Load1', '19421331221', NULL),
(3, '1188959688', NULL, 'Load2', '39421331221', NULL),
(4, '1271672029', NULL, 'Load3', '49421341221', 'Description'),
(5, '1271888888', NULL, 'Load4', '59421331221', 'Description');
输出应该如下所示:

+----+------------+--------------------------+-------------+-------------+-------+-----------+---------+
| id | CIDs       | COLOR                    | XT          | MP          | Name  | PIDs      | unqName |
+----+------------+--------------------------+-------------+-------------+-------+-----------+---------+
|  1 | 1253374160 | test test test test test | 89421331221 |             | Load1 | 1,2       | Load1   |
|  3 | 1188959688 | NULL                     | 39421331221 | NULL        | Load2 | 3         | Load2   |
|  4 | 1271672029 | NULL                     | 49421341221 | Description | Load3 | 4,5       | Load3   |
+----+------------+--------------------------+-------------+-------------+-------+-----------+---------+
我怎样才能尽快做到这一点? 我已尝试与某个分组,但需要几分钟:/

//编辑: 对于group by的解决方案,我需要4个子查询:/

//编辑2: 应要求:

    SELECT id, 
       cids, 
       color, 
       xt, 
       mp, 
       name, 
       Concat(pids, ",", Group_concat(DISTINCT id)) AS PIDs, 
       Ifnull(name, id)                             AS unqName 
FROM   (SELECT id, 
               cids, 
               color, 
               xt, 
               mp, 
               name, 
               Concat(pids, ",", Group_concat(DISTINCT id)) AS PIDs, 
               Ifnull(mp, id)                               AS unqMP 
        FROM   (SELECT id, 
                       cids, 
                       color, 
                       xt, 
                       mp, 
                       name, 
                       Concat(pids, ",", Group_concat(DISTINCT id)) AS PIDs, 
                       Ifnull(xt, id)                               AS unqXT 
                FROM   (SELECT id, 
                               cids, 
                               color, 
                               xt, 
                               mp, 
                               name, 
                               Group_concat(DISTINCT id) AS PIDs, 
                               Ifnull(color, id)         AS unqCOLOR 
                        FROM   performance 
                        GROUP  BY unqcolor) m 
                GROUP  BY unqxt) x 
        GROUP  BY unqmp) y 
GROUP  BY unqname

在我看来,有一些概念上的缺陷:对于
Load1
有两个
id
s,两个
COLOR
s,两个
XT
s和两个
MP
s。如何在示例中第一行的每一列中使用一个任意值将其聚合到一行中?您当前的SQL是什么来获得这个结果的?我使用我在上面发布的SQL语句。但速度太慢了,我需要合并字段。有时字段是给定的,有时不是,所以我需要合并字段。