У меня возникла проблема с выбором из базы данных. В основном то, что я пытаюсь достичь: У меня есть таблица с 3 столбцамиLaravel where if statemnet
type | number | date
мне нужно делать, где на основе столбца (типа)
If(type = 1) then where number > 1 else where date today()
Так что, если тип равен 1 затем примените, где к числу других применяется то, что на сегодняшний день. Можно ли так думать? И это можно сделать с Laravel Racquent? Спасибо.
Исходный запрос и тип данных являются: type = string number = integer date = timestamp (Y-m-d H:i:s)
Запрос
SELECT * FROM table_name WHERE CASE WHEN type=days THEN date>now() ELSE number>0 END
Таблица схемы CREATE TABLE banners ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT, type varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', number int(10) unsigned NOT NULL DEFAULT '0', finish_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (
идентификатор ) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Решение, которое работало:
select * from `banners`
where `banners`.`block_id` = 1 and `banners`.`block_id` is not null
and IF (`type` = 'days', `finish_at` > now(), `number` > 0)
Laravel Путь:
ParentModel::banners()->whereRaw("IF (`type` = 'days', `finish_at` > now(), `number` > 0)")->get();
У вас есть ошибка в синтаксисе SQL; 'WHERE IF (type = days, finish_at> now(), left> 0) 'at line 3' – Froxz
Что такое' days' здесь? Вы не указали его в своем вопросе –
Это мои данные, тип - это строка, если принимает только целые числа? – Froxz