У меня есть таблица настроек, в которой есть такие столбцы, как тип, значение, компания, группа. Из этой таблицы мне нужно выбрать только одну строку каждого другого типа в зависимости от того, совпадает ли моя информация о пользователе с другими столбцами или нет.
Пример. Я в компании 1 и в группе 1, и моя таблица настроек состоит из следующих строк:
+--+-----+-------+---------+-------+
|id|type | value | company | group |
+--+-----+-------+---------+-------+
|1 |1 | 50 | 1 | 1 |
|2 |1 | 70 | NULL | NULL |
|3 |2 | 1 | NULL | NULL |
|4 |2 | 99 | 1 | 1 |
|5 |2 | 999 | NULL | 1 |
|6 |3 | 500 | NULL | NULL |
+--+-----+-------+---------+-------+
Если есть настройка для компании или группы, используйте ее, в противном случае используйте строку по умолчанию (компания и группа имеют значение NULL). Есть еще пара столбцов, таких как компания и группа.
Из этой таблицы мне нужно выбрать id:s 1,4 и 6, потому что это настройки, которые мне нужны в данном случае. Id 1 и id 4 совпадают с моей информацией о пользователе, id 5 тоже совпадает, но id 4 точно совпадает. Идентификатор 6 соответствует, потому что нет более близкой настройки типа 3.
Могут быть сотни компаний и групп, поэтому я не хочу создавать алгоритм PHP для получения правильного значения настройки. Это было бы катастрофой.
Я попытался выбрать строки и упорядочить их с помощью компании DESC, но при группировке типа это не сработает. Я также пытался присоединиться к max(company), где компания IS NOT NULL, но я застрял и теперь пытаюсь получить помощь.
Буду признателен, если кто-нибудь поможет мне в этом деле!
IFNULL(b.company = 1, TRUE)
на(b.company = 1 OR b.company IS NULL)
и аналогичным образом дляb.group
. 05.10.2012