私はかなり長い間PHP Webページを構築してきましたが、私はMySQLデータベースに精通していません。私は鉱山のような問題の解決策を徹底的に探しましたが、同様の質問がありましたが、提供されたソリューションの実装方法を理解できませんでした。mysql階層的再帰的クエリ
次のように私は3レベルの階層構造における5つのテーブルを持っている:
Clients (id, name, ...)
↳ Projects (id, client_id, name, ...)
↳ Contacts (id, project_id, name, ...)
↳ Files (id, project_id, name, ...)
↳ Events (id, project_id, name, ...)
私はひねりを加えた再帰クエリを達成しようとしています:私は、任意のレベルのIDを提供する場合(レベルを指定してそのIDが属している)、ツリー構造内の親レコードと子レコードの両方のレベルを返す必要があります。
例:私はプロジェクトのIDを持っているので、プロジェクトが属するクライアント(親)とプロジェクトの連絡先、ファイル、およびイベント(子)を返送したいと思います。または、イベントのIDがある場合は、プロジェクト(親)、クライアント(親の親)、連絡先とファイル(イベントと同じレベルにあります)を出力したいと思います。
ポイントは、選択したアイテムの完全な履歴を表示することです。これは1つのクエリでも可能ですか?どんな提案も歓迎され、感謝しています!
このようなクエリは、データセット全体が返されます
クイック返信とサンプルありがとう!私は同じパスのように見えます:LEFT JOIN(テーブルの列数が異なるため、UNIONなし)を試しましたが、戻されたデータセットをフィルタリングする方法を理解できませんでした。木構造を作るレベルをどのように区別しますか?そして、私のデザイン(「冗長性」)の弱点を指摘できますか? – laciii
冗長性の例として、連絡先が複数のプロジェクトに関連付けられている場合はどうなりますか?私が知る限り、ここには「レベル」はありませんが、http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-toを参照してください。 -me-to-be-a-very-simple-sql-query – Strawberry