2012-02-17 5 views
2

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

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (sp_product) LEFT OUTER JOIN sp_product_type ON sp_product_type .`tCat' at line 2

SELECT sp_product . name , sp_product . price , sp_product . perm_name , sp_product . description , GROUP_CONCAT(product_type.tName SEPARATOR FROM (sp_product) LEFT OUTER JOIN sp_product_type ON sp_product_type . tCategory = sp_product . type WHERE perm_name = 'bacon'

$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(); 

Любые идеи, что я делаю неправильно ?

ответ

5

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

Это должно быть 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(); 
+1

И может быть, нужно передать параметр 'false' в' select' - из-за неправильного алгоритма защиты ... – uzsolt

+0

У меня все еще есть ошибка: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с «sp_product»). LEFT OUTER JOIN 'sp_product_type' ON' sp_product_type''tCategory' 'в строке 1 – Claremont

0

Посмотрите на GROUP_CONCAT документации:

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

GROUP_CONCAT(product_type.tName SEPARATOR 

Для этого:

GROUP_CONCAT(product_type.tName SEPARATOR ', ') 

Вы смешивания '

«Продукт.Название , 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"); 
+0

Спасибо за помощь, но я все еще получаю ошибку – Claremont

+0

Так, сделал эту работу? –

+0

Нет, я не мог заставить это работать – Claremont

1

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

$this->db->select('GROUP_CONCAT(product_type.tName SEPARATOR ",") as product_type.tName', false); 
0

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') на имя поля, которое не в базе данных. Это было протестировано и работает.

1

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

0

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

$ this-> db-> выберите ('(SELECT SUM (company.amount) FROM платежей ГДЕ company.invoice_id = 4') AS amount_paid», FALSE);

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

0

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

$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(); 
Смежные вопросы