我的数据库中有三个单独的表。一个带有列表,companies
另一个带有列表company_categories
。和最后一个类似的categories
。companies
and表中的所有行categories
都有一个唯一的 ID。表中没有唯一 ID company_categories
。
这是我的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)具有相同的徽标,则结果中只会返回其中一家公司。我希望两者都展示。这可以使用codeigniter的活动记录来完成吗?
如果不是,如何在 SQL 查询中完成?