2014-01-14 39 views
2

我有一個簡單的結構,像這樣:MySQL的左連接:從左表中的數據複製給每場比賽

挑戰表

id | title 
----------------- 
5 | My challenge woo 

目標表

id | title   | challenge_id 
------------------------------------- 
35 | My goal here | 5 
38 | My goal here | 5 
39 | My goal here | 5 
40 | My goal here | 5 

每一個挑戰具有多重目標。如果我嘗試像這樣:

SELECT c.id, c.title, g.id, g.title FROM challenges%s as c LEFT JOIN goals%s as g ON c.id=g.challenge_id WHERE c.id=%s 

我得到的挑戰的副本,每一個目標是matche,這是噸的數據,我不想每次的。例如,結果如下:

({'g.id': 35L, 'g.title': u'My goal here', 'id': 5L, 'title': u'My challenge woo'}, {'g.id': 38L, 'g.title': u'My goal here', 'id': 5L, 'title': u'My challenge woo'}, {'g.id': 39L, 'g.title': u'My goal here', 'id': 5L, 'title': u'My challenge woo'}, {'g.id': 40L, 'g.title': u'Another goal', 'id': 5L, 'title': u'My challenge woo'}) 

請注意,挑戰的每個實例是字典的一部分嗎?我知道mysql沒有任何數組,但我已經嘗試CONCAT沒有任何運氣,以及其他類似的查詢,如these

僅供參考我使用MySQLdb的/ w的蟒蛇

+0

您期待單個SQL查詢返回分層數據集嗎? –

+0

這基本上是首先使用'JOIN'的想法。如果你不想讓你在兩個單獨的連續查詢中查詢目標和挑戰。 – hanzi

回答

2

您需要join後做一個彙總,與group_concat()

SELECT c.id, c.title, group_concat(ws_concat(':', g.id, g.title), separator ', ') as goals 
FROM challenges c LEFT JOIN 
    goals g 
    ON c.id = g.challenge_id 
WHERE c.id=%s 
GROUP BY c.id, c.title; 

這將在每一行創建的目標清單,與形成「id:title」。