2016-02-01 7 views
0

tbl_products:Получить одно значение, используя цикл по каждому элементу в CodeIgniter

+------------+--------------+-------------+------------+ 
| 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 для получения значения. Я получил Samsung 2 раза и Apple один раз. Но я хочу, чтобы Samsung и 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

Как именно вы хотите, чтобы ваш $ result выглядел? Я имею в виду, что вы ожидаете увидеть там? – raina77ow

ответ

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

Большое спасибо @Gouda Elalfy. Оно работает. Отличная работа. – Sumon

1

Использование group_by

$this->db->group_by('company_name'); 
0

Это должно быть очевидно, что у вас есть более одной записи для определенных category_ids. На практике у вас может быть 0, 1 или множество записей. В этом случае вам нужно будет либо: a) сообщить «Нет названия компании», если записи не найдены, b) просмотреть записи, которые были найдены и скомпоновать их, или c) использовать запрос fancier и функцию group_concat, чтобы сообщить SQL, чтобы получить все имена. Если я не ошибаюсь, я думаю, что два предыдущих ответа здесь неверны. Я считаю, что просто использование group_by по-прежнему просто даст вам одно имя_компании.

MySQL предлагает GROUP_CONCAT функции можно использовать в сочетании с GROUP BY пункта, но вы можете использовать некоторую другую СУБД. Я думаю, 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 
} 
Смежные вопросы