我为日托中心的父母创建了一个联系人列表。现在我想在网页上显示它。到目前为止,它在技术上运行完美,但它的布局让我不满意。
我的数据库如何工作的简短说明:每个父母可以有一个或多个孩子,每个孩子可以有一个或多个父母 - 多对多关系。为了建立一对多的关系,我将其分解为三张表 - parents、children 和 parent_children。然后我使用了 JOIN 并且一切都显示得很好。但是,由于它显示了每个实体,因此在网页上显示它会变得相当混乱。我会用一个例子来解释:
家庭 1:马克和爱丽丝威尔逊有两个孩子,约翰和比尔。
家庭 2:彼得和杰西卡罗伯逊有一个孩子,丽莎。
Current layout:
Parent Child
-------------------------------
Mark Wilson John Wilson
Mark Wilson Bill Wilson
Alice Wilson John Wilson
Alice Wilson Bill Wilson
Peter Robertson Lisa Robertson
Jessica Robertson Lisa Robertson
-------------------------------
Desired layout:
Parent Child
-------------------------------
Mark Wilson John Wilson
Alice Wilson Bill Wilson
Peter Robertson Lisa Robertson
Jessica Robertson
-------------------------------
有没有什么好的方法来获得所需的布局?
好的,所以现在我已经在一个列中得到这个工作,这取决于我如何使用 GROUP_CONCAT:
代码:
SELECT GROUP_CONCAT(parents.name) AS Parents, children.name
FROM parents p
LEFT JOIN parents_children pc USING(id_parent)
LEFT JOIN children c USING(id_child)
GROUP BY pc.id_parent;
结果:
Parents Children
-----------------------------------------------
Mark Wilson, Alice Wilson Bill Wilson
Mark Wilson, Alice Wilson John Wilson
Peter Robertson, Jessica Robertson Lisa Robertson
同样,如果我改为使用 GROUP_CONCAT children.name 和 GROUP BY pc.id_child,我会得到:
Parents Children
------------------------------------------
Mark Wilson Bill Wilson, John Wilson
Alice Wilson Bill Wilson, John Wilson
Peter Robertson Lisa Robertson
Jessica Robertson Lisa Robertson
我真的想要这些的组合,结果如下:
Parents Children
----------------------------------------------------
Mark Wilson, Alice Wilson Bill Wilson, John Wilson
Peter Robertson, Jessica Robertson Lisa Robertson