[Решено] Помогите объединить дату и время в sql запросе

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
ZULI
Сообщения: 15
Зарегистрирован: 2015.11.09, 21:34

[Решено] Помогите объединить дату и время в sql запросе

Сообщение ZULI »

Есть такой запрос в Yii2

Код: Выделить всё

$onTvNext = Tvprog::find()
        ->where( [ 'channel_id' => $channelId ] )
        ->andWhere( ['>=', 'date', $dateNow ] )
        ->andWhere( ['>=', 'time', $timeNow ] )
        ->limit( 3 )
        ->offset( 0 )
        ->all();
либо он же в обычном виде

Код: Выделить всё

SELECT * FROM `tvprogram` WHERE `date` >= $dateNow AND `time` >= $timeNow AND `channel_id` = $channelId LIMIT 0,3
Дата и время в базе в разных колонках. Мне нужно объединить в запросе дату и время, чтобы они были как одно значение datetime (2020-10-15 22:50:00). В моем варианте при достижении последней записи в текущей дате, не берет первые записи следующей даты. Было бы все нормально, если бы дата и время были в одном поле, но есть что есть.

Вроде как concat нужно использовать, но не пойму как его прилепить к моему запросу. Помогите плз.
Последний раз редактировалось ZULI 2020.10.16, 11:33, всего редактировалось 1 раз.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Помогите объединить дату и время в sql запросе

Сообщение maleks »

ZULI писал(а): 2020.10.15, 23:44 Вроде как concat нужно использовать, но не пойму как его прилепить к моему запросу. Помогите плз.
Так пробуйте:

Код: Выделить всё

use yii\db\Expression;
//...
$query->andWhere( ['>=', new Expression("CONCAT([[date]], ' ', [[time]])"), $datetime ] )
Yii2 universal module sceleton - for basic and advanced templates
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Помогите объединить дату и время в sql запросе

Сообщение skynin »

ZULI писал(а): 2020.10.15, 23:44

Код: Выделить всё

SELECT * FROM `tvprogram` WHERE `date` >= $dateNow AND `time` >= $timeNow AND `channel_id` = $channelId LIMIT 0,3
Было бы все нормально, если бы дата и время были в одном поле, но есть что есть.

Вроде как concat нужно использовать, но не пойму как его прилепить к моему запросу. Помогите плз.
Не совсем понятно при чем тут concat
ZULI писал(а): 2020.10.15, 23:44 Мне нужно объединить в запросе дату и время, чтобы они были как одно значение datetime (2020-10-15 22:50:00)
и, какой будет конечный запрос, если у вас - две колонки в БД, одна ожидает дату, а другая - время?

1. Напишите правильный запрос на SQL
2. Перепишите его на ActiveQuery
3. Подготовьте правильно параметры запроса.
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
ZULI
Сообщения: 15
Зарегистрирован: 2015.11.09, 21:34

Re: Помогите объединить дату и время в sql запросе

Сообщение ZULI »

maleks писал(а): 2020.10.16, 06:39 Так пробуйте:

Код: Выделить всё

use yii\db\Expression;
//...
$query->andWhere( ['>=', new Expression("CONCAT([[date]], ' ', [[time]])"), $datetime ] )
Спасибо! Именно то что нужно было!
ZULI
Сообщения: 15
Зарегистрирован: 2015.11.09, 21:34

Re: Помогите объединить дату и время в sql запросе

Сообщение ZULI »

skynin писал(а): 2020.10.16, 09:47 Не совсем понятно при чем тут concat
Объединить 2 колонки и сделать по объединенной выборку.
skynin писал(а): 2020.10.16, 09:47 и, какой будет конечный запрос, если у вас - две колонки в БД, одна ожидает дату, а другая - время?
Почему они ждут друг друга? выборку по дате и времени убрать, объединенный столбец добавить и по нему выбрать. Все логично.

Выше @maleks рабочее решение дал, спасибо!
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: [Решено] Помогите объединить дату и время в sql запросе

Сообщение skynin »

-- Объединить 2 колонки и сделать по объединенной выборку.
а, понятно.
просто я автоматически избегаю вариантов которые приводят к fullscan
и автоматически начинаю с вариантов такой подготовки запроса, которая упростит работу сервера БД
поэтому и не понял.

-- Почему они ждут друг друга?
ждут здесь в смысле requiere, требуют. "Функция ожидает в качестве второго параметра объект класса SomeClass"
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Ответить