まず、私がLEFT JOIN
やりたいことを行うための最良の方法であるかどうかさえわからないので、説明するために最善を尽くします.
2 つのテーブルがあります。1 つはサイトのリストを含み、もう 1 つはロールのリストを含みます。ユーザーは 1 つのロールしか持たないかもしれませんが、サイトと同じ数のロールを持つことができます。
テーブル「サイト」
site_id | site_name | site_domain
---------------------------------------
1 | Site A | sitea.com
2 | Site B | siteb.com
テーブル「ロール」
site_id | user_id | role_id
---------------------------------
1 | 1 | 1
1 | 2 | 1
2 | 2 | 2
上記の例のように、ユーザー 1 は 1 つのサイトで 1 つの役割しか持っていませんが、ユーザー 2 は 2 つの異なるサイトで 2 つの役割を持っています。
私がやりたいことは、おそらく日曜の夜で、単純なことを考えていないだけですが、個々のユーザーの役割とともに、サイトのリストを取得することです。ユーザーのそのサイトに役割が存在しない場合は、 NULL (または 0) を返します。
出力結果の 2 つの例:
ユーザー 1
site_id | site_name | site_domain | role_id
----------------------------------------------
1 | Site A | sitea.com | 1
2 | Site B | siteb.com | NULL
ユーザー 2
site_id | site_name | site_domain | role_id
----------------------------------------------
1 | Site A | sitea.com | 1
2 | Site B | siteb.com | 2
現時点でのクエリは次のとおりですが、ユーザーに役割が定義されていないため、2 番目のサイトは表示されません (つまり、上記のように、ユーザー 1 の場合、2 番目のサイト B は表示されません)。私は何かが足りないことを知っていますが、今夜はそれを考えることができません:o(
SELECT site_id, site_name, site_domain, role_id
FROM `sites`
LEFT JOIN `roles`
ON sites.site_id=roles.site_id
WHERE roles.user_id='1'