これが私が理解できないものです。正常に動作するように 1 つの結合を取得できます。2 つ以上のテーブルを機能させる唯一の方法は、ループ内でネストされたクエリを使用することです。メインテーブルから複数のリストを取得せずに、複数の結合を使用して単一のクエリから結果を取得するにはどうすればよいですか?
3 つのテーブル: ユーザー: 2 ユーザー。プロジェクト: 2 つのプロジェクト。スキル: 6 スキル;
ここでは Codeigniter を使用するので、CI 構文を入れます。
$this->db->select('*');
$this->db->from('projects');
$this->db->join('user', 'user.id = projects.project_principal_id','left');
$this->db->join('projects_skills_bridge', 'projects_skills_bridge.ps_project_id = projects.project_id','right');
//$this->db->group_by('project_id'); // removed the multiple listing problem caused by the above JOIN
$sql = $this->db->get();
これで、ループしてプロジェクトを取得すると (ユーザーとスキルの情報を含む)、2 つのプロジェクトしか取得できません。そのプロジェクトに関連付けられたスキルを取得する方法を理解できる唯一の方法は、ループ内でネストされたクエリを使用することです (上記の 2 番目の JOIN なし)。GROUP 句を使用すると、必要な 2 つのプロジェクトのみが取得されますが、必要な複数のプロジェクトではなく、最初のスキルのみが取得されます。
出力は次のようになります。
Project Alpha by User Bob - スキル: ギター、キーボード、ベース
ユーザー Sally によるプロジェクト ベータ - スキル: ライティング、html、請求
これは初歩的な問題だと思いますので、ご覧いただきありがとうございます。