2013-03-13 110 views
-1

反正是有讓MySQL查詢結果掌握多行作爲結果的查詢結果爲單排

(id,result1,[result21,result22, result23]) 

我試圖檢索結果,其中第三列是一個時間戳和它對應於相同的ID。

例如,我得到的結果

(21,29383) 
(21,23988) 
(22,23455) 
(22,34564) 

我想要的結果

(21,(29383,23988)) 
(21,(223455,34564)) 
+0

你可以發佈一些示例數據嗎? – fthiella 2013-03-13 17:43:12

+2

請參閱'GROUP_CONCAT()'聚合函數。 – Barmar 2013-03-13 17:43:15

+1

你可以發佈你正在使用的哪個mysql模塊以及你用來獲取結果的代碼嗎? – 2013-03-13 18:03:23

回答

2

我不熟悉的MySQL,但如果你得到你的結果的Python元組,你可以操縱數據結構上的Python側。一種可能的方式可能是:

from collections import defaultdict 

results = [ 
    (21,29383), 
    (21,23988), 
    (22,23455), 
    (22,34564) 
] 

d = defaultdict(list) 

for your_id, result in results: 
    d[your_id].append(result) 

results_as_tuples = tuple(
    sorted([ 
     (your_id, tuple(results)) for your_id, results in d.iteritems() 
    ]) 
) 

print results_as_tuples # --> ((21, (29383, 23988)), (22, (23455, 34564))) 
+0

嗨。我試過這個: 得到了錯誤: for your_id,導致結果: 「值錯誤:太多的值解壓縮」。但是iteritems()被用於這個權利? – 2013-03-14 06:05:00

+0

將使用groupby()爲此工作? – 2013-03-14 06:46:15

+0

@SumitSaurav:你得到的錯誤意味着你的元組包含兩個以上的條目。然而,在您的示例數據中,每個元組只包含兩個條目,所以這就是我的代碼示例的作用。 groupby()可能是一個選項,是的。 – pemistahl 2013-03-14 08:39:58