1

DBには3つの別々のテーブルがあります。1つはのリストをcompanies持ち、もう1つはのリストを持ちcompany_categoriesます。そして最後はのようなものですcategoriescompaniesandテーブルのすべての行には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クエリでこれをどのように行うことができますか?

4

1 に答える 1

2

@Rickが言うように、あなたは必要ありませんdistinct。さらに、から選択しcompanies、その逆ではなく参加する必要がありますcompany_categories

SQLは次のようになります。

SELECT * FROM companies 
JOIN companies_categories 
ON companies.company_id=companies_categories.company_id 
WHERE category_id = 2

更新されたsqlfiddle:http ://www.sqlfiddle.com/#!2/d1f24/16/0

codeigniterの場合:

$this->db->select('companies.company_id as co_id, companies.logo as co_logo, companies.name as co_name')
$this->db->where('display_flg',true);
$this->db->join('company_categories', 'companies.company_id = company_categories.company_id');
$query = $this->db->get('companies');
于 2013-02-14T01:39:07.237 に答える