2015-06-16 50 views
1

我正在創建一個帶有兩個表「聯繫人組」和「聯繫人列表」的Angularjs應用程序。聯繫人列表表項具有聯繫人組中的項目的corespondent id。 我想要實現的是一個MySQL/Sqlite選擇查詢,它將每個聯繫人列表項目作爲其父項的子對象。作爲父對象和子對象的兩個表的Mysql查詢

contact_group 
    id | title 
------------ 
    1 | friends 
    2 | mates 
    3 | family 

contact_list 
id | gID | name | number 
-------------------------- 
    1 | 1 | dave |0208500 
    2 | 1 | dan |4213839 
    3 | 1 | sans |5656434 
    4 | 2 | fola |1918982 
    5 | 3 | brian|2398343 
    6 | 5 | grace|0934232 

選擇查詢結果的例子(這是我想)

id: 1 
title: friends 
child: {id:1, name:dave, number:0208500}, {id:2, name:dan, number:4213839},{id:3, name:sans, number:5656434} 

我情況下,有這樣做的另一種方式,這是我想達到的。我創建了一個帶有contact_group標題標題的手風琴。每個手風琴都有contact_list的通訊聯繫人。

如果有人能幫助我,我會很高興。謝謝

回答

3

爲了實現這一點,你將不得不使用MySQL GROUP_CONCAT(文檔在這裏:https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

使用GROUP_CONCAT我們將能夠參加所有的匹配來自觸點TB的行變成一列中的字符串。通過更多的文本格式,我們可以從聯繫人TB和CONCAT的額外用法中粘合在一起,我們將在此列中將字符串構建爲JSON字符串,然後您可以在應用程序中使用該字符串。

這裏是SQL:

SELECT 
    a.id, 
    a.title, 
    CONCAT(
     '[', 
     GROUP_CONCAT(
      CONCAT(
       '{"id":', 
       b.id, 
       ', "name":"', 
       b. `name`, 
       '", "number":"', 
       b.number, 
       '"}' 
     ) 
      ORDER BY 
       b.`name` 
    ), ']') 
     AS people 
FROM 
    contact_group AS a 
LEFT JOIN contact_list AS b ON a.id = b.gID 
GROUP BY 
    a.id, 
    a.title 

這是結果,我們將得到: enter image description here

不要忘了索引和外鍵添加到您的表,以便查詢處理會更好。

SQLLITE版本: 以調整查詢sqllite,有2個功能,需要改變。 SqlLite使用||運營商而不是CONCAT,並且它不支持GROUP_CONCAT內部的ORDER BY。所以對於SQLLITE DB查詢將是這樣的:

SELECT 
    a.id, 
    a.title, 
    '[' || 
     GROUP_CONCAT(
      '{"id":' || 
       b.id || 
       ', "name":"' || 
       b. `name` || 
       '", "number":"' || 
       b.number || 
       '"}' 


    ) || ']' 
     AS people 
FROM 
    contact_group AS a 
LEFT JOIN contact_list AS b ON a.id = b.gID 
GROUP BY 
    a.id, 
    a.title 

MySQL Fiddle Demo

SqlLite Fiddle Demo

+0

謝謝@Lupin請將這個查詢寫爲sqlite(websql)。我遇到了雙引號和單引號的問題,它正在產生錯誤。 –

+0

在SQLITE中創建一個小提琴並嘗試使用它,分享小提琴,我會看看 – Lupin

+0

它是否適合你? – Lupin

-1

嘗試下面的查詢,

select * from contact_group join contact_list on contact_group.id= contact_list.gid 
+0

謝謝,我已經嘗試過這一點。它不會將contact_list作爲contact_group下的對象進行分組 –

相關問題