Динамическое создание операторов WHERE - PullRequest
0 голосов
/ 22 апреля 2011

Фрагмент ниже распечатывает запрос, который выбирает пользователей из БД, которые имеют DOB определенного возрастного диапазона.В этом случае пользователи, которым от 11 до 12 или от 17 до 18 лет.Я пытаюсь динамически создать этот запрос в синтаксисе CodeIgniter Active Record.

Этот фрагмент

$age_count = 0;
foreach( $range as $r )
{
    $start_date = strtotime($r[0] . "years ago");
    $stop_date = strtotime($r[1] . "years ago");

    $range = array('dob <' => $start_date, 'dob >' => $stop_date);
    ( $age_count == "0" || $age_count%1 ) ? $this->db->where($range) : $this->db->or_where($range);

    $age_count++;
}
$users = $this->db->get("users")->result_array();

создает этот запрос

SELECT * FROM (`users`) WHERE `dob` < 956351611 AND `dob` > 924729211 OR `dob` < 766962811 OR `dob` > 735426811

Последнее ИЛИ, конечно, должно быть AND.Как мне этого добиться?Все сводится к знанию, когда использовать or_where() или просто where().Я думал, что каждый нечетный проход через foreach должен быть ИЛИ, но я еще не совсем там.

Эта функция может принимать только один диапазон (11-12) или несколько.

1 Ответ

0 голосов
/ 22 апреля 2011

С помощью базы данных API вы можете использовать несколько where() для получения WHERE … AND ….

$this->db->where('name', $name);
$this->db->where('title', $title);
$this->db->where('status', $status); 

// WHERE name = 'Joe' AND title = 'boss' AND status = 'active'

(связано с документацией)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...