我试图找到一种方法将这两个表连接在一起,这是我能够做到的,但如果找到多个匹配的值,它会再次显示产品表中的所有内容。现在我试图将MySQL group_concat一起使用,以便能够在数组中的一个字段中列出所有tName但是我一直在使用MySQL收到错误:
错误号码:1064
您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在'FROM(
sp_product
)LEFT OUTER JOINsp_product_type
附近sp_product_type
附近使用正确的语法。在第2行使用`tCat'选择
sp_product
。name
,sp_product
。price
,sp_product
。perm_name
,sp_product
。{{1} },GROUP_CONCAT(product_type.tName SEPARATOR FROM(description
)LEFT OUTER JOINsp_product
ONsp_product_type
。sp_product_type
=tCategory
。sp_product
WHERE { {1}} ='培根'
type
任何想法我做错了什么?
答案 0 :(得分:7)
似乎有不正确的引号问题。
应为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 :(得分:2)
您应该使用false作为选择中的第二个参数来跳过转义:
$this->db->select('GROUP_CONCAT(product_type.tName SEPARATOR ",") as product_type.tName', false);
答案 2 :(得分:1)
无需在group concat中提及分隔符作为逗号(,),因为默认情况下它只会在组concat中使用逗号(,)
答案 3 :(得分:0)
查看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',')as product_type.tName');
试试这个:
"product.name, product.price, product.perm_name, product.description, GROUP_CONCAT(product_type.tName SEPARATOR ',') as product_type.tName");
答案 4 :(得分: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'
)中的字段重命名为不在数据库中的字段名称。
已经过测试并且正在运行。
答案 5 :(得分:0)
#Claremont,#user319198,#FredTheLover,#Mosty Mostacho 在使用CodeIgniter开发任何项目时请记住,要在codeigniter的select查询中选择多个数据或使用复合语句,您需要定义select查询的第二个参数。像
$ this-> db-> select('(SELECT SUM(company.amount)FROM payments WHERE company.invoice_id = 4')AS amount_paid', FALSE 强>);
由于 $ this-> db-> select()接受可选的第二个参数。如果将其设置为FALSE,CodeIgniter将不会尝试使用反引号来保护您的字段或表名称。如果您需要复合选择语句,这非常有用。
答案 6 :(得分: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();
答案 7 :(得分:0)
尝试此操作,假设您使用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();