通过在codeigniter中使用foreach循环获取单个值

时间:2016-02-01 14:22:33

标签: php mysql codeigniter

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;
}

3 个答案:

答案 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
}