我有以下SQL查询,但我似乎无法找到如何更改此查询以使其与CI一起使用:
SELECT *
FROM Table1
JOIN Table2 ON Table2.tID = Table1.tID
JOIN Table3 ON Table3.vID = Table2.vID
WHERE vegetable
IN (
'Potatoe', 'Carrot'
)
GROUP BY Table1.tID
HAVING COUNT( DISTINCT vegetable ) =2
以下是我目前对CI的看法:
$arrCount = count($array);
$this->db->select('*');
this->db->from('Table1');
$this->db->join('Table2', 'Table2.tID = Table1.tID');
$this->db->join('Table3', 'Table3.vID = Table2.vID');
$this->db->where_in('vegetable', $array);
$this->db->group_by("Table1.tID");
$this->db->having('vegetable');
$this->db->count_all($arrCount);
$q = $this->db->get();
但这样做会给我以下sql语句:
Table 'DatabaseTest.2' doesn't exist
SELECT COUNT(*) AS `numrows` FROM `2`
我很确定我使用的ActiveRecord计数是不正确的,但我不确定它会是什么,因为我找到了CI的任何COUNT()
函数。
所以我的问题是如何在CodeIgniter中进行SQL查询?
额外注意,我还尝试使用CI $this->db->query
运行查询,但在查看in
时会出现数组错误。
$this->db->query('SELECT *
FROM Table1
JOIN Table2 ON Table2.tID = Table1.tID
JOIN Table3 ON Table3.vID = Table2.vID
WHERE vegetables
IN (
' .$array . '
)
GROUP BY Table1.tID
HAVING COUNT( DISTINCT vegetables ) =' . $arrCount);
接下来是错误信息:
Unknown column 'Array' in 'where clause'
所以假设我使用的是where
而不是where in
。有人可以帮助我让我的SQL与CI活动记录一起使用吗?
答案 0 :(得分:1)
$this->db->query('SELECT *
FROM Table1
JOIN Table2 ON Table2.tID = Table1.tID
JOIN Table3 ON Table3.vID = Table2.vID
WHERE vegetables
IN ("' . implode('", "', $array) . '")'
GROUP BY Table1.tID
HAVING COUNT( DISTINCT vegetables ) =' . $arrCount);
使用implode()将数组转换为MySQL可读字符串。
编辑:以引号内爆。
答案 1 :(得分:1)
我没有使用活动记录测试第一个查询,但是这不起作用吗? count_all是一个自己的查询。第一个参数假设是表...你输入数组的大小就像2表!!! active records reference
$arrCount = sizeof($array);
$this->db->select('*');
this->db->from('Table1');
$this->db->join('Table2', 'Table2.tID = Table1.tID');
$this->db->join('Table3', 'Table3.vID = Table2.vID');
$this->db->where_in('vegetable', $array);
$this->db->group_by("Table1.tID");
$this->db->having('COUNT(DISTINCT vegetable)', $arrCount);
$q = $this->db->get();
此外,对于查询,您需要将数组转换为字符串:
$this->db->query('SELECT *
FROM Table1
JOIN Table2 ON Table2.tID = Table1.tID
JOIN Table3 ON Table3.vID = Table2.vID
WHERE vegetables
IN (
' .implode(',',$array) . '
)
GROUP BY Table1.tID
HAVING COUNT( DISTINCT vegetables ) =' . $arrCount);
答案 2 :(得分:0)
我可能会建议 $ this-> db-> count_all($ arrCount); 一行,直到你开始工作为止。