如何在mysql中的关系数据中的每个单亲记录上选择n个记录子

时间:2019-05-01 11:55:55

标签: php mysql

如何在mysql的关联数据中的每个父记录上选择n个记录子

假设我有两个表,一个表是父表,第二个表是子表。父级可以有n个子级,我必须与子级一起提取记录数据,其中父级=> id是本地键,而子级=> parent_id是外键。如何有效地做到这一点。

this.demoList

结果如

    parent_table
+-------------------+
|  id   |   name    |
+-------------------+
|   1   |     p1    |
|   2   |     p2    |
|   3   |     p3    |
|   4   |     p4    |
|   5   |     p5    |
|   6   |     p6    |
+-------------------+



          child_table
+------------------------------+
|  id   | parent_id  |  name   |
+------------------------------+
|   1   |     1      |   c1    |
|   2   |     1      |   c2    |
|   3   |     2      |   c3    |
|   4   |     3      |   c4    |
|   5   |     3      |   c5    |
|   6   |     3      |   c6    |
|   7   |     5      |   c7    |
|   8   |     6      |   c8    |
|   9   |     6      |   c9    |
+------------------------------+

我知道可以使用for循环(我使用php)

2 个答案:

答案 0 :(得分:1)

您可以使用GROUP BYGROUP_CONCAT

 SELECT p.*,GROUP_CONCAT(c.id,',',c.parent_id,',',c.name SEPARATOR ':') As subset
 FROM 
 parent_table p 
 JOIN child_table c ON p.id=c.parent_id GROUP BY p.id

enter image description here

对于subset,您可以使用explode将它们分开。 DEMO

答案 1 :(得分:0)

您可以尝试使用类似的方法,通过与汇总一起使用来获得子行和子计数

SELECT parent_table.id as p_id,parent_table.name as p_name,child_table.id as c_id ,child_table.name as c_name,child_table.parent_id as cp_id, COUNT(child_table.id) as count_children FROM parent_table INNER JOIN child_table on parent_table.id=child_table.parent_id GROUP by parent_table.id, child_table.id WITH ROLLUP 

enter image description here