如何在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)
答案 0 :(得分:1)
您可以使用GROUP BY
,GROUP_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
对于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