@vsko

Как составить условие where для диапазонов чисел x-y-z x,y,z x-y,z?

Есть база в которой хранятся в строковом виде данные для фильтра в нескольких форматах:
10
10 or 20
10, 12, 16 or 20
10, 15, 20, 30, 40
12-29

Данные для перечисления количества уроков в неделю, выводятся на сайте как есть, тоже строками.

Задача сделать фильтр выбора чекбоксами несколько вариантов и отфильтровать условием where:
Уроков в неделю
- меньше чем 15
- 16-20
- 21-25
- 26-30
- более 31

Подскажите как составить такое условие. С оператором like не так все просто, данные в фильтре и в базе разные. Делаю на Yii2.

Вот примерный код модели SchoolSearch для составления запроса ActiveDataProvider

$query = School::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder' => ['id' => SORT_DESC]]
]);

if (isset($params['lessons_week']) && count($params['lessons_week'])) {
$lessonsTimeList = array_keys($params['lessons_week']);

$query->joinWith('course')
->where( ... );
}

Или подскажите как вообще такие задачи лучше решить на Yii, что бы можно было хранить диапазоны недель в базе и затем фильтровать разными вариантами?
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега MySQL
Web developer
Есть база в которой хранятся в строковом виде данные для фильтра в нескольких форматах

Выкинуть такую БД и перестать заниматься извращениями.
Хранить надо в структурированном (нормальном) виде. В крайнем случае фильтры можно хранить в json, который делать из ActiveQuery->where
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы