MYSQL結合ステートメント - オプションのテーブル?

さて、私はこれが意味をなさないようにしようとします。基本的に私はいくつかの別々のSQL文を実行するのではなく、MYSQLエンジンができるよりも最適化できるように、私は4つのテーブルを持っています。

基本的に私はこれらの4つのテーブルを持っています:

projects (key:id)
project_users (key:project_id , user_id)
users (key:id)
tasks (key:project_id)

これは私の質問です:

     SELECT projects.*, users.*, tasks.*,
     FROM 
     projects JOIN ( project_users JOIN 
                     users ON 
                     project_users.user = users.id ) 
        ON projects.id = project_users.project_id
        JOIN ( tasks )
               ON projects.id = tasks.project_id 
      WHERE projects.company = 2 ORDER BY projects.id

基本的には、プロジェクトのリスト、そのプロジェクトのユーザー、および特定の会社のそのプロジェクトのタスクを取得しようとしています。

問題 - このプロジェクトにタスクがない場合、そのプロジェクトは返されません。私はまだそのプロジェクトが必要ですが、そのプロジェクトのタスクは0個だけです。

私はJOINの声明には新しいので、私ができることがいくつか改善されたら、私に知らせてください!

あなたの時間に感謝して助けてください!!!!!

0
Ehh ...私はSQLの中毒者ではありませんが、最初の考えは、プロジェクトのリストとタスクのリストが必要な場合は、実際には2つのクエリです。
追加された 著者 Jared Farrish,
PHPでは、クエリー結果を反復処理するときにプロジェクトのリストを収集するつもりですか?
追加された 著者 Jared Farrish,
私は同意する、仕事の分割は、データベースの構造は、ユーザーがタスクに独立していることを示唆し、これらの2つを1つのクエリに混ぜることでいくつかの副作用が生じるかもしれないので、より良いだろう。
追加された 著者 Erbureth,
まあ、彼らはどちらもキー値に匹敵します。つまり、プロジェクトを取得する代わりに、それらのプロジェクトでタスクのリストを取得することを意味します。
追加された 著者 Quinton Pike,

2 答え

タスクを結合する結合の前に left outer を追加するだけです。これは、タスクがなくてもプロジェクトを得ることができます。

2
追加された

左または右の結合はあなたの新しい友達です

http://dev.mysql.com/doc/refman /5.0/en/left-join-optimization.html

0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com