在Code Igniter中使用普通SQL和Active Records

时间:2011-08-09 20:58:51

标签: sql database codeigniter

我的Active Records查询中间有一个普通的SQL语句。有没有办法在不进行两次独立查询的情况下将此查询“添加”到AR中?如果有人帮助我将其“转换”为Active Records风格,以防它无效,则SQL如下所示。

SELECT birthday
FROM usertable
WHERE STR_TO_DATE(birthday, '%d.%m.%Y')
BETWEEN $minimumDate AND $maximumDate

2 个答案:

答案 0 :(得分:1)

你可以这样做:

$this->db
    ->select('birthday')
    ->where("STR_TO_DATE(birthday, '%d.%m.%Y') BETWEEN $minimumDate AND $maximumDate")
    ->get('usertable');

但在这种情况下你必须自己逃避变量。

可以也这样做:

$this->db
    ->select('birthday')
    ->where("STR_TO_DATE(birthday, '%d.%m.%Y') >", $minimumDate)
    ->where("STR_TO_DATE(birthday, '%d.%m.%Y') <", $maximumDate)
    ->get('usertable');

这会自动转义where()的第二个参数,但现在我们运行STR_TO_DATE()两次并且查询稍微不那么优雅(不使用BETWEEN)。

Active Record可能很难使用MySQL功能。有时,如果您没有动态构建查询,最好手动执行查询。 CI提供了一些方法,可以轻松地为您提供适当的输入。

请参阅用户指南中有关Query Bindings

的部分
$sql = "SELECT birthday
FROM usertable
WHERE STR_TO_DATE(birthday, '%d.%m.%Y')
BETWEEN ? AND ?";

$this->db->query($sql, array($minimumDate, $maximumDate));

答案 1 :(得分:0)

你可以这样做 -

SELECT birthday
FROM usertable
WHERE STR_TO_DATE(birthday, '%d.%m.%Y')
BETWEEN $minimumDate AND $maximumDate

像这样链接 -

$this->db->select('birthday')->from('usertable')->where('STR_TO_DATE', '%d.%m.%Y')->limit($minimumDate, $maximumDate);