@Cyberjs

Как в YII2 сделать фильтрацию из mssql чтобы поля не повторялись?

У меня есть $gridColumns где filter - ArrayHelper::map($searchModel->getStatus(),'Status,'StatusText'), в модели у меня

public function getStatus()
    {
      return Yii::$app->db
            ->createCommand(
                "SELECT Status,
                CASE
                WHEN Status  = 0 THEN 'Учится'
                WHEN Status IN  (50,111,124,156) THEN 'Выпускник' 
                WHEN Status IN (6,7,8,9,11,12,52,61,62,68,72,75,76,127,144) THEN 'Отчислен' 
                ELSE 'Ошибка'
                END as StatusText
				FROM table
                ORDER BY StatusText;"
            )
            ->queryAll();
    }


И получается вот так
6358cbac8a59e171125338.png
Как можно объединить эти Отчислен и Выпускник чтобы они один раз были а не несколько
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
@FernandoErrNando
Если я правильно понял задачу, то вы хотите, чтобы у вас была фильтрация в таблице по статусу, но у вас 1 и тот же статус может иметь разные ID. Тогда решаем 2 задачи:
1. Объединение ID по названию в фильтре
2. Фильтрация основной таблице.

Если вы хотите, чтобы в выпадающем списке не было дублей, то вам правильно написали, воспользуйтесь GROUP BY. Сделайте запрос типа
SELECT GROUP_CONCAT(DISTINCT status_id) as ids, status FROM table GROUP BY status
дальше дублей не будет. Полученное значение ids уже можно использовать в фильтрации через WHERE IN, если поле пришло ненулевое.

Ну а вообще, если честно, то у вас таблица выглядит ненормализованной, подумайте, почему так получилось. Может можно как-то разделить таблицу, вынести часть полей в другую, тогда исчезнет дублирование данных и подобные сложные запросы упростятся
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы