DBには3つの別々のテーブルがあります。1つはのリストをcompanies
持ち、もう1つはのリストを持ちcompany_categories
ます。そして最後はのようなものですcategories
。companies
andテーブルのすべての行にはcategories
一意のIDがあります。company_categories
テーブルに一意のIDはありません。
companies
これは私のテーブルがどのように見えるかのサンプルです:
company_id | company_name | logo | ....
-----------+------------------+-----------+--------
5 | Co 5 | 123.jpg | ....
6 | Company 6 | 123.jpg | ....
7 | 7's a company | 234.jpg | ....
8 | EightCo | 345.jpg | ....
categories
これは私のテーブルがどのように見えるかのサンプルです:
category_id | category_name
------------+-----------
1 | Blue
2 | Red
3 | Green
4 | Yellow
そして私のcompanies_categories
見た目:
company_id | category_id
-----------+-----------
5 | 2
5 | 3
6 | 1
6 | 2
7 | 1
注:company_idとcategory_idはどちらも、関連するテーブルに外部キーがあります
私がやろうとしているのは、特定のカテゴリを持つすべての企業をリストすることです。たとえば、カテゴリ2が選択された場合、企業5と6が返されます。カテゴリ4を選択した場合、何も表示されません。会社8は表示されるべきではありません(カテゴリが関連付けられていないため)
アクティブレコードでcodeigniterのdistinct()関数を使用して、この問題を解決しようとしました。
$this->db->from('company_categories')
->distinct()
->where('category_id', $category_id)
->join('companies', 'companies.company_id = company_categories.company_id')
->select('companies.company_id as co_id companies.logo as co_logo, companies.name as co_name')
->get()->result();
しかし、これが実際に行うことは、、、、およびを区別するcompany_id
ことcompany_logo
ですcompany_name
。したがって、会社(会社5と6など)が同じロゴを持っている場合、それらの会社の1つだけが結果に返されます。両方見せたいです。これは、codeigniterのアクティブレコードを使用して実行できますか?
そうでない場合、SQLクエリでこれをどのように行うことができますか?