tbl_products:
+------------+--------------+-------------+------------+
| product_id | product_name | category_id |company_name|
+------------------------------------------------------+
| 1 | iPhone | 3 | Apple |
| 2 | galaxy s1 | 3 | Samsung |
| 3 | galaxy s2 | 3 | Samsung |
| 4 | tab | 4 | Apple |
+------------------------------------------------------+
从上表中,我想根据category_id获取公司名称。我用foreach来获取价值。我有三次和三次Apple三次。但我希望三星和苹果都只展示一次。可能吗?我在我的模型中写了波纹管代码。
public function select_company_by_category_id($category_id) {
$this->db->select('*');
$this->db->from('tbl_products');
$this->db->where('category_id', $category_id);
$query_result = $this->db->get();
$result = $query_result->result();
return $result;
}
答案 0 :(得分:1)
使用group_by
,并仅选择company_name
:
public function select_company_by_category_id($category_id) {
$this->db->select('company_name');
$this->db->from('tbl_products');
$this->db->where('category_id', $category_id);
$this->db->group_by('company_name');
$query_result = $this->db->get();
$result = $query_result->result();
return $result;
}
答案 1 :(得分:1)
使用group_by
$this->db->group_by('company_name');
答案 2 :(得分:0)
对于某些category_ids,您应该有多个记录。实际上,您可能有0,1或许多记录。在这种情况下,你需要a)报告“没有公司名称”,如果没有找到记录,b)循环找到并连接它们的记录,或c)使用一个发烧友查询和一个group_concat函数告诉SQL为您提供所有名称。如果我没有弄错的话,我认为这里的两个先前答案是不正确的。我相信只使用group_by仍然只能得到一个company_name。
MySQL提供 GROUP_CONCAT 功能,您可以将其与 GROUP BY 子句结合使用,但您可能正在使用其他一些DBMS。我认为Postgresql有 array_agg 或类似的东西。
此外,如果您使用 $ query_result-> result(),那么您将获得一个对象数组。如果你只是使用 $ query_result-> row()那么你应该得到一个对象而不是一个对象数组
无论如何,我尝试了类似的东西,似乎有效。
public function select_company_by_category_id($category_id) {
$this->db->select("GROUP_CONCAT(company_name) AS names");
$this->db->from('tbl_products');
$this->db->where('category_id', $category_id);
$this->db->group_by('category_id');
$query_result = $this->db->get();
$result = $query_result->row();
return $result
}