CodeIgniter GROUP_CONCAT и присоединиться - PullRequest
5 голосов
/ 17 февраля 2012

Я пытаюсь найти способ объединить эти две таблицы, что я смог сделать, но если он нашел более одного совпадающего значения, он снова показал все из таблицы продуктов.Теперь я пытаюсь использовать MySQL group_concat вместе, чтобы иметь возможность перечислить все tName в одном поле в массиве, но я продолжаю получать сообщение об ошибке с MySQL:

Номер ошибки: 1064

У вас ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'FROM (sp_product) LEFT OUTER JOIN sp_product_type ON sp_product_type .`tCat "в строке 2

SELECT sp_productsp_product_type. tCategory = sp_product. type ГДЕ perm_name = 'бекон'

$this->db->select('product.name, product.price, product.perm_name, product.description, GROUP_CONCAT(product_type.tName SEPARATOR ',') as product_type.tName'); 
$this->db->from('product');
$this->db->where('perm_name', $this->uri->segment(2));
$this->db->join('product_type', 'product_type.tCategory = product.type', 'LEFT OUTER');
$query = $this->db->get(); 

Есть идеи, что я делаю неправильно?

Ответы [ 8 ]

7 голосов
/ 17 февраля 2012

Кажется, проблема с неправильными кавычками.

Это должно быть GROUP_CONCAT(product_type.tName SEPARATOR ",")

Попробуйте ниже:

$this->db->select('product.name, product.price, product.perm_name, product.description, GROUP_CONCAT(product_type.tName SEPARATOR ",") as product_type.tName'); 
    $this->db->from('product');
    $this->db->where('perm_name', $this->uri->segment(2));
    $this->db->join('product_type', 'product_type.tCategory = product.type', 'LEFT OUTER');
    $query = $this->db->get(); 
2 голосов
/ 05 ноября 2013

Вы должны использовать false как второй параметр в вашем выборе, чтобы пропустить экранирование:

$this->db->select('GROUP_CONCAT(product_type.tName SEPARATOR ",") as product_type.tName', false);
1 голос
/ 27 декабря 2013

нет необходимости упоминать разделитель как запятую (,) в группе concat, так как по умолчанию он принимает запятую (,) только в группе concat

0 голосов
/ 07 августа 2018

попробуйте это, предполагая, что вы используете id для сортировки, используйте GROUP_BY вместо ORDER_BY, а также используйте DISTINCT .. это будет работать

 $this->db->group_by("product.id","ASC");
$this->db->select('product.name, product.price, product.perm_name, product.description, GROUP_CONCAT(DISTINCT product_type.tName SEPARATOR ",") as tName',FALSE); 
$this->db->from('product');
$this->db->where('perm_name', $this->uri->segment(2));
$this->db->join('product_type', 'product_type.tCategory = product.type', 'LEFT OUTER');
$query = $this->db->get(); 
0 голосов
/ 04 ноября 2014

Я думаю, что это должно быть так:

$this->db->select('product.name, product.price, product.perm_name, product.description')
   ->select(' GROUP_CONCAT(product_type.tName SEPARATOR ",") as product_type.tName', FALSE); 
$this->db->from('product');
$this->db->where('perm_name', $this->uri->segment(2));
$this->db->join('product_type', 'product_type.tCategory = product.type', 'LEFT OUTER');
$query = $this->db->get();
0 голосов
/ 24 октября 2014

Для #Claremont, # user319198, #FredTheLover, #Mosty Mostacho При разработке любого проекта, использующего CodeIgniter, следует учитывать, что для выбора нескольких данных или использования составных операторов в запросе выбора кодового указателя необходимо определить второй параметрзапрос выбора.Например,

$ this-> db-> select ('(ВЫБЕРИТЕ СУММУ (company.amount) ОТ платежа ГДЕ company.invoice_id = 4') AS amount_paid ', FALSE );

Поскольку $ this-> db-> select () принимает необязательный второй параметр.Если вы установите значение FALSE, CodeIgniter не будет пытаться защитить имена полей или таблиц обратными галочками.Это полезно, если вам нужен составной оператор выбора.

0 голосов
/ 18 декабря 2013

user319198 был в хорошем начале, но его ответ не работает. Рабочий ответ следующий:

$this->db->select('product.name, product.price, product.perm_name, product.description, GROUP_CONCAT(product_type.tName SEPARATOR) as tName'); 
    $this->db->from('product');
    $this->db->where('perm_name', $this->uri->segment(2));
    $this->db->join('product_type', 'product_type.tCategory = product.type', 'LEFT OUTER');
    $query = $this->db->get(); 

Обратите внимание, я удалил SEPARATOR "," и переименовал поле в (as product_type.tName') в имя поля, которого нет в базе данных. Это было проверено и работает.

0 голосов
/ 17 февраля 2012

Ознакомьтесь с документацией GROUP_CONCAT:

Измените это:

GROUP_CONCAT(product_type.tName SEPARATOR

На это:

GROUP_CONCAT(product_type.tName SEPARATOR ', ')

Высмешиваете '

'product.name, product.price, product.perm_name, product.description, GROUP_CONCAT (product_type.tName SEPARATOR', ') как product_type.tName');

Попробуйте это:

"product.name, product.price, product.perm_name, product.description, GROUP_CONCAT(product_type.tName SEPARATOR ',') as product_type.tName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...