Схема базы:
                  
                  
                  1. Id (int) индекс записи
                  
                  
                  2. Position (int) номер пользователя в группе 1,2,3... 
                  
                  
                  3. Uid пользователя
                  
                  
                  4. Группа(str)
                  
                  
                  5. Является основной группой (int 0/1)
                  
                  
                  
                  
                  
                  Примечание: пользователь может находится в разных группах. Но только одна может быть выбрана основной
                  
                  
                  
                  
                  
                  Записи в базе предварительно сгруппированы: 
                  
                  
                  Записи идущие подряд идут с позиции 1, потом 2..., относятся к одной группе. Потом другая группа позиционирование с 1  и тд
                  
                  
                  
                  
                  
                  Задача: получить все записи(* со всеми столбцами) по критерию группы.. 
                  
                  
                  И
                  
                  
                  Добавить столбец или отдельным массивом такой пункт: 0/1 если у пользователя выбрана любая другая  основная группа
                  
                  
                  
                  
                  
                  Какой вариант решения будет эффективным?
                  
                  
                  
                  
                  
                  Есть вариант использовать create_function и там делать запрос по каждому пользователю. Но звучит как костыль.
                  
                  
                
select user_id, sum(is_base) has_base_grp from users group by user_id having sum (case when group_id = :критерий then 1 else 0 end) > 0
ну или self join, если индексы есть
Были неточности в моей изначальной формулировке. Исправил выше. Основная неточность: нужно выводить все записи по критерию группы, не меняя последовательности. Лишь добавить ещё один столбец или отдельным массивом все получить. Будут идеи?
Обсуждают сегодня