Использование обычного SQL с активными записями в Code Igniter - PullRequest
1 голос
/ 10 августа 2011

У меня есть один нормальный оператор SQL в середине моего запроса Active Records.Можно ли как-нибудь добавить этот запрос к AR без двух независимых запросов?SQL следующий, если кто-нибудь поможет мне «преобразовать» его в стиль Active Records, если он не работает.

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

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Вы можете просто сделать это:

$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 предлагает несколько способов сделать это легко, избегая при этом правильного ввода.

См. Раздел в руководстве пользователя о Привязках запросов :

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

$this->db->query($sql, array($minimumDate, $maximumDate));
0 голосов
/ 10 августа 2011

Вы можете сделать это -

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...