似乎Active Record(Codeigniter)不接受WEEK参数,我不明白为什么?! Whern我删除'3',我的查询工作正常!
$this->db->select('WEEK(insere_le,3) AS semaine, COUNT(*) AS nombre')
->from($this->table_name)
->where(array(
'type_anomalie' => "Dérogation",
'YEAR(insere_le)' => $year
))
->group_by('WEEK(insere_le,3)')
->get()
->result_array();
此查询在执行时显示以下字符串:
SELECT WEEK(insere_le, `3)` AS semaine, COUNT(*) AS nombre FROM (`aero_anomalie_montage`) WHERE `type_anomalie` = 'Dérogation' AND YEAR(insere_le) = '2014' GROUP BY WEEK(insere_le, `3)`
如您所见,它在数字3之前和括号之后添加了撇号
答案 0 :(得分:1)
您的语法看起来有点困惑。为什么不把它们放在两个不同的选择中(如果可能的话......)?
我不知道这是否会有所帮助,但我发现了这一点,它会阻止它完全添加反引号。
$ this-> db-> select()接受可选的第二个参数。如果你设置 它为FALSE,CodeIgniter不会试图保护你的领域或表 带反叛的名字。如果您需要复合选择,这非常有用 言。
http://ellislab.com/codeigniter/user-guide/database/active_record.html
答案 1 :(得分:1)
嗯,如果你看一下活跃的rec类(system/core/database/DB_active_rec.php
),你会在function select()
中找到它:
if (is_string($select))
{
$select = explode(',', $select);
}
所以你选择做的事实上是将你的字符串爆炸成如下数组:
array(
WEEK(insere_le,
3) AS semaine,
COUNT(*) AS nombre
);
然后处理这个。
这看起来像是活跃记录类开发人员的疏忽,可能无法通过逃避价值来解决......
另一方面,它实际上在上面之前检查了它的字符串..所以可以试试这个:
$this->db->select(array('WEEK(insere_le,3) AS semaine', 'COUNT(*) AS nombre'))...
与group_by(array('WEEK(insere_le,3)'))...
所以最终结果将是:
$this->db->select(array('WEEK(insere_le,3) AS semaine', 'COUNT(*) AS nombre'))
->from($this->table_name)
->where(array(
'type_anomalie' => "Dérogation",
'YEAR(insere_le)' => $year
))
->group_by(array('WEEK(insere_le,3)'))
->get()
->result_array();
答案 2 :(得分:0)
$this->db->select("WEEK(insere_le,3) AS semaine, COUNT(*) AS nombre", FALSE);