2017-03-17 37 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 
);