Kohana Query Bilder есть проблемы

phpшник

Новичок
Приветствую! у меня проблема, мне нужен запрос
Код:
SELECT * FROM `table` WHERE `date` between DATE_SUB(NOW(), INTERVAL 45 YEAR) AND DATE_SUB(NOW(), INTERVAL 30 YEAR)
но у меня ни как неполучается. я пробовал так
Код:
$id = DB::select('id')
                ->from('users')
                ->where('born', 'BETWEEN', array( array(DB::expr('DATE_SUB(NOW(), INTERVAL '.$age_from.' YEAR) AND DATE_SUB(NOW(), INTERVAL '.$age.' YEAR)'))));
еще вот так
Код:
$id = DB::select('id')
                ->from('users')
                ->where('born', 'BETWEEN', array(array(DB::expr('DATE_SUB(NOW(), INTERVAL '.$age_from.' YEAR')),array(DB::expr( 'DATE_SUB(NOW(), INTERVAL '.$age.' YEAR'))));
ни в какую,а прямым запросом без QB работает.

кто ни будь подскажите что не так?
спасибо за внимание.
 

Здыхлик

Kohaner
Команда форума
Зачем пихать в выражение километр массивов?
PHP:
->where(
    'born',                 // поле
    'BETWEEN',      // оператор
    array(                 // массив из двух значений для BETWEEN
        DB::expr('DATE_SUB(NOW(), INTERVAL '.$age_from.' YEAR'), 
        DB::expr('DATE_SUB(NOW(), INTERVAL '.$age.' YEAR')
   )
)
 

phpшник

Новичок
в кохане процедуру можно сделать только в таком виде array(DB::expr('COUNT(`id`)'))
 

phpшник

Новичок
флоппик,
в кохане процедуру можно сделать только в таком виде array(DB::expr('COUNT(`id`)'))
например
Код:
 DB::select('username', array(DB::expr('COUNT(`id`)'), 'total_posts')
    ->from('posts')->group_by('username')->having('total_posts', '>=', 10);
 

phpшник

Новичок
флоппик,
в кохане процедуру можно сделать только в таком виде array(DB::expr('COUNT(`id`)'))
например
Код:
 DB::select('username', array(DB::expr('COUNT(`id`)'), 'total_posts')
    ->from('posts')->group_by('username')->having('total_posts', '>=', 10);
 

Здыхлик

Kohaner
Команда форума
Почитайте получше документацию. Например, что ожидается на входе DB::select(), а что - в метод where()
 

phpшник

Новичок
Здыхлик,
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND DATE_SUB(NOW(), INTERVAL 45 YEAR AND `active` = 'yes'' at line 1 [ SELECT `id` FROM `users` WHERE `born` BETWEEN DATE_SUB(NOW(), INTERVAL 25 YEAR AND DATE_SUB(NOW(), INTERVAL 45 YEAR AND `active` = 'yes' ]
 

Здыхлик

Kohaner
Команда форума
Блин, ну такую простую опечатку в запросе могли бы и самостоятельно найти...
 

phpшник

Новичок
Здыхлик, именно в таком раскладе
Код:
->where(
    'born',                // поле
    'BETWEEN',      // оператор
    array(                // массив из двух значений для BETWEEN
        DB::expr('DATE_SUB(NOW(), INTERVAL '.$age_from.' YEAR'),
        DB::expr('DATE_SUB(NOW(), INTERVAL '.$age.' YEAR')
  )
)
и выдает синтаксическую ошибку, и где я по вашему её допустил?
 

phpшник

Новичок
понял поспешил вставить ваш код,
Код:
->where(
    'born',                // поле
    'BETWEEN',      // оператор
    array(                // массив из двух значений для BETWEEN
        DB::expr('DATE_SUB(NOW(), INTERVAL '.$age_from.' YEAR)'),
        DB::expr('DATE_SUB(NOW(), INTERVAL '.$age.' YEAR)')
  )
)
 
Сверху