2017-03-17 54 views
1

这里是链接列表的id:我的表Sqlfiddle数据逆透视的GROUP_CONCAT后

内容

mysql> select * from tb_dts; 
+----+------+------+ 
| Id | key1 | key2 | 
+----+------+------+ 
| 1 | 1 | 1 | 
| 2 | 1 | 1 | 
| 3 | 1 | 1 | 
| 4 | 2 | 1 | 
| 5 | 2 | 1 | 
| 6 | 2 | 1 | 
| 7 | 2 | 1 | 
| 8 | 1 | 2 | 
| 9 | 1 | 2 | 
| 10 | 1 | 2 | 
| 11 | 1 | 2 | 
| 12 | 1 | 2 | 
| 13 | 3 | 1 | 
| 14 | 3 | 1 | 
| 15 | 3 | 1 | 
| 16 | 3 | 1 | 
| 17 | 2 | 2 | 
| 18 | 2 | 2 | 
| 19 | 2 | 2 | 
| 20 | 2 | 3 | 
| 21 | 2 | 3 | 
| 22 | 2 | 3 | 
| 23 | 3 | 2 | 
| 24 | 3 | 2 | 
| 25 | 3 | 2 | 
| 26 | 3 | 2 | 
+----+------+------+ 
26 rows in set (0.00 sec) 

这是我试过

mysql> select group_concat(id) from tb_dts group by key1,key2 limit 0,4; 
+------------------+ 
| group_concat(id) | 
+------------------+ 
| 1,2,3   | 
| 8,9,10,11,12  | 
| 4,5,6,7   | 
| 17,18,19   | 
+------------------+ 
4 rows in set (0.00 sec) 

mysql> select id from tb_dts group by key1,key2 limit 0,4; 
+----+ 
| id | 
+----+ 
| 1 | 
| 8 | 
| 4 | 
| 17 | 
+----+ 
4 rows in set (0.00 sec) 

这是我所希望得到的输出group by key1,key2 limit 0,4;:余万■所有ID在一列,由KEY1和KEY2限制组之内,我不知道如何得到它GROUP_CONCAT不能帮助我在此

的前4独特的key1,key2什么都id组合跌倒是我的问题是使用group by key1,key2 limit 0,4;

+----+ 
| id | 
+----+ 
| 1 | 
| 2 | 
| 3 | 
| 8 | 
| 9 | 
| 10 | 
| 11 | 
| 12 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 17 | 
| 18 | 
| 19 | 
+----+ 
15 rows in set (0.00 sec) 

表结构

DROP TABLE IF EXISTS `tb_dts`; 
CREATE TABLE `tb_dts` (
    `Id` int(11) NOT NULL AUTO_INCREMENT, 
    `key1` int(11) DEFAULT '-99', 
    `key2` int(11) DEFAULT '-99', 
    PRIMARY KEY (`Id`), 
    KEY `main` (`key1`,`key2`) 
) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=latin1; 

LOCK TABLES `tb_dts` WRITE; 
INSERT INTO `tb_dts` VALUES (1,1,1),(2,1,1),(3,1,1),(4,2,1),(5,2,1),(6,2,1),(7,2,1),(8,1,2),(9,1,2),(10,1,2),(11,1,2),(12,1,2),(13,3,1),(14,3,1),(15,3,1),(16,3,1),(17,2,2),(18,2,2),(19,2,2),(20,2,3),(21,2,3),(22,2,3),(23,3,2),(24,3,2),(25,3,2),(26,3,2); 
UNLOCK TABLES; 

回答

0

有解决问题的方式。

首先,你必须创建一个表像

CREATE TABLE `Tmp` (
    `Id` int(11) 
); 

然后,你运行该代码后

select @TmpStr = group_concat(id) from tb_dts group by key1,key2 limit 0,1; 

[email protected] = "1,2,3" 

写一个funtion斯普利特@TmpStr“”并分别插入到TMP 。

,继续做同样的事情

select @TmpStr = group_concat(id) from tb_dts group by key1,key2 limit 1,1; 
select @TmpStr = group_concat(id) from tb_dts group by key1,key2 limit 2,1; 
select @TmpStr = group_concat(id) from tb_dts group by key1,key2 limit 3,1; 

它会显示结果像你想要的。

+0

你误解了这个问题,为前4个独特的组合为key1,KEY2什么都落在ID是我的问题是'通过键1,键2极限0,4组;' – user3637224

0

用的分隔符,如下

select group_concat(id SEPARATOR '\n') from tb_dts group by key1,key2 
0

如果顺序并不重要,然后尝试:

见输出这里:SQL Fiddle

select id 
from tb_dts 
where (key1,key2) in (
     select key1,key2 
     from (
       select distinct key1,key2 from tb_dts limit 0,4 
     ) as sub 
);