託児所の保護者の連絡先リストを作成しました。今、私はそれをウェブページに表示したいと考えています。これまでのところ、技術的には完璧に動作しますが、満足できないのはレイアウトです。
私のデータベースのしくみについて簡単に説明します。各親は 1 人以上の子を持つことができ、各子は 1 人以上の親を持つことができます - 多対多の関係です。1 対多の関係を作成するために、parent、children、parent_children の 3 つのテーブルに分割しました。次に、JOIN を使用すると、すべてがうまく表示されます。ただし、すべてのエンティティを表示するため、Web ページに表示するにはかなり雑然とします。例を挙げて説明します:
家族 1: マークとアリスのウィルソンには、ジョンとビルの 2 人の子供がいます。
家族 2: Peter と Jessica Robertson には、1 人の子供、Lisa がいます。
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 の使用方法に応じて、これを 1 つの列で機能させることができました。
コード:
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