2015-10-19 69 views
0

我有一個包含獲得多個值相同行

id | data 
1  10 
2  20 

和含有表B的引用的

id | a_id | value 
1  1  abc 
2  1  def 
3  2  ghi 

柱A_ID表A的列ID我需要檢索最後表B中表A中來自表A的4行數據以及來自表B的對應值。當我試圖使用此查詢檢索它時

SELECT * FROM tableA INNER JOIN tableB ON tableA.id = tableB.id ORDER BY tableA.id DESC LIMIT 4 

我從表格中的ID爲1的重複行作爲

id | data | value 
1  10  abc 
1  10  def 
2  20  ghi 

有沒有什麼辦法讓我可以減少這種重複的數據,這樣我可以用它的兩個值相處編號1的單排?

+0

SELECT *,tableb.value - 你爲什麼要選擇兩次的東西 – Strawberry

+1

是的,你可以做到這一點,但它將是一個帶有分隔符的單個字符串。 'GROUP_CONCAT(tableB.value SEPERATOR',')... GROUP BY tableA.id' https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat – cmorrissey

+0

如果你想使用方括號,你可以使用'REPLACE()'結束'GROUP_CONCAT':'REPLACE(GROUP_CONCAT(CONCAT('[',tableB.value''')),',', '')as val1' – JNevill

回答

0

的文檔,請使用以下查詢:

SELECT * FROM tableA INNER JOIN tableB ON tableA.id = tableB.id ORDER BY tableA.id DESC LIMIT 4 Group By tableA.id 
+2

請解釋它爲什麼可行。 –

0

只是後期處理在PHP中,如:

$data = []; 
while ($row = $result->fetchAssoc()) { // or whatever you do to fetch your data 
    if (!isset($data[$row['id']])) { 
     $row['value'] = [$row['value']]; 
     $data[$row['id']] = $row; 
    } else { 
     $data[$row['id']]['value'][] = $row['value'] 
    } 
} 

給你一個不錯的結果,如:

[ 
    1 => [ 
     id => 1, 
     data => 10, 
     value => ['abc', 'def'] 
    ] 
    .. 
] 
相關問題