来自两个表的Mysql查询作为父对象和子对象

时间:2015-06-16 19:12:25

标签: mysql sqlite

我正在创建一个带有两个表格的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的联系人。

如果有人能帮助我,我会很高兴的。谢谢

2 个答案:

答案 0 :(得分:3)

为了实现这一目标,您必须使用MySql NULL(文档:printf

使用GROUP_CONCAT,我们将能够将联系人TB中的所有匹配行连接到一列中的字符串中。通过联系人TB和GROUP_CONCAT的额外用法,我们将更多文本格式化,我们将在此列中构建字符串作为JSON字符串,然后您就可以在应用程序上使用它。

这是SQL:

CONCAT

这是我们得到的结果: enter image description here

不要忘记向表中添加索引和外键,以便查询处理更好。

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

MySQL Fiddle Demo

答案 1 :(得分:-1)

尝试以下查询,

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