我正在创建一个带有两个表格的Angularjs应用程序" Contact Group"和"联系人列表"。联系人列表表项具有联系人组中项目的共同对应ID。 我想要实现的是一个MySQL / Sqlite选择查询,它将每个联系人列表项作为其父项的子对象。
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的联系人。
如果有人能帮助我,我会很高兴的。谢谢
答案 0 :(得分:3)
为了实现这一目标,您必须使用MySql NULL
(文档:printf
)
使用GROUP_CONCAT
,我们将能够将联系人TB中的所有匹配行连接到一列中的字符串中。通过联系人TB和GROUP_CONCAT
的额外用法,我们将更多文本格式化,我们将在此列中构建字符串作为JSON字符串,然后您就可以在应用程序上使用它。
这是SQL:
CONCAT
这是我们得到的结果:
不要忘记向表中添加索引和外键,以便查询处理更好。
SQLLITE版本:
为了将查询调整为sqllite,有2个功能需要更改。
SqlLite使用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
运算符而不是||
,它不支持CONCAT
内的ORDER BY
。所以对于SQLLITE DB,查询将如下所示:
GROUP_CONCAT
https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
答案 1 :(得分:-1)
尝试以下查询,
select * from contact_group join contact_list on contact_group.id= contact_list.gid