这很奇怪,因为我的查询执行并在mysqlworkbench中返回正确的结果,但是在我的应用程序中我得到了
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在')附近使用正确的语法作为类别FROM产品p'在第1行
使用datamapper在codeignitor中。
$query="
SELECT CONCAT_WS('~', c3.name, c2.name, c1.name) as category
FROM products p
LEFT JOIN metadata m ON m.parent_id = p.id
LEFT JOIN category0_table c0 ON c0.id = m.value
LEFT JOIN category1_table c1 ON c1.id = c0.parent_ID
LEFT JOIN category2_table c2 ON c2.id = c1.parent_ID
LEFT JOIN category3_table c3 ON c3.id = c2.parent_ID
WHERE p.id =5
AND m.key = 'my_category'";
$model = new Product_model();
$results = $model->query($query);
return $results;
我想不出有什么不对,我已经尝试取出concat声明了。
答案 0 :(得分:0)
为什么不使用有效记录?它使您的应用程序能够在运行多个不同数据库的任何平台上灵活运行,包括(mysql,mssql,postgress,oracle)。只是更好地练习imo。如果有一天你想在Windows服务器上运行你的应用程序怎么办?只需在IIS中安装php,你就可以了。或者,如果您已经在IIS中运行带有php的SQL服务器的Microsoft服务器,并且您的IT部门需要削减成本,该怎么办?你可以说"嘿,我知道一种方法,我们可以从预算中削减数千,不会丢失任何东西,只需开源!"然后你得到促销等等......你知道这个演习。
$this->db->select("CONCAT_WS('~',c3.name,c2.name,c1.name) as category")->
from("products p")->
join("metadata m','m.parent_id = p.id","left")->
join("category0_table c0","c0.id=m.value","left")->
join("category1_table c1","c1.id=c0.parent_ID","left")->
join("category2_table c2","c2.id = c1.parent_ID","left")->
join("category3_table c3","c3.id = c2.parent_ID","left")->
where("p.id","5")
where("m.key","my_category");
$query = $this->db->get();
if($query->num_rows() >= 1) {
return $query->result();
}else {
return FALSE;
}