Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2013, 14:00   #1
Jopses
Пользователь
 
Регистрация: 03.02.2012
Сообщений: 39
По умолчанию VIEW или как поломать мозг

Здравствуйте уважаемые!

Есть такая вьюшка:

Код:
ALTER ALGORITHM=UNDEFINED `view_rules` AS 
SELECT `cl`.`cam_id` AS `cam_id`,
`cu`.`user_id` AS `user_id`,
`cu`.`group_id` AS `group_id`,
`cu`.`user_login` AS `user_login`,
`cl`.`cam_name` AS `cam_name`,
`cl`.`allowed_to_all` AS `allowed_to_all`,
`cu`.`is_admin` AS `is_admin`,
`crg`.`rule_status` AS `rule_status_group`,
`cr`.`rule_status` AS `rule_status`,
                                      (case when ((`cl`.`allowed_to_all` > 0) and isnull(`crg`.`rule_status`) and isnull(`cr`.`rule_status`) and (`cu`.`is_admin` = 0)) 
                                      then `cl`.`allowed_to_all` when ((`crg`.`rule_status` is not null) and isnull(`cr`.`rule_status`) and (`cu`.`is_admin` = 0)) 
                                      then `crg`.`rule_status` when ((`cr`.`rule_status` is not null) and (`cu`.`is_admin` = 0)) then `cr`.`rule_status` when (`cu`.`is_admin` > 0) 
                                      then `cu`.`is_admin` else 0 end) AS `result` 
FROM (((`cams_list` `cl` join `cams_users` `cu`) 
left join `cams_rules` `cr` on(((`cr`.`user_id` = `cu`.`user_id`) and (`cr`.`cam_id` = `cl`.`cam_id`)))) 
left join `cams_rules_groups` `crg` on(((`crg`.`group_id` = `cu`.`group_id`) and (`crg`.`cam_id` = `cl`.`cam_id`)))) 
ORDER BY `cu`.`user_id`
Смысл переделки вот в чём. Нужно добавить cams_groups.group_name в эту вьюшку, отсортировать по cams_groups.group_id и поля rule_status_group, rule_status могут иметь значение NULL, остальные нет)

То есть вся эта выборка с условиями сделана для user_id, user_login, а надо для group_id, group_name!!

Если у кого будет свободная минутка, можете поразмыслить)) Я уже свой неокрепший мозг сломал.

Файл с таблицами прилагается
Вложения
Тип файла: rar localhost.rar (3.1 Кб, 8 просмотров)

Последний раз редактировалось Jopses; 30.01.2013 в 14:17.
Jopses вне форума Ответить с цитированием
Старый 30.01.2013, 14:27   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если выборка по group_id, то можно cams_groups сделать ведущей таблицей, остальны джоинам к ней зацепить. Можно и в LEFT JOIN добавить её. Во WHERE условие на cams_groups.group_id. Выдернуть из неё group_name нет проблем.
Что касается NOT NULL для каких-то полей - во WHERE нет проблем добавить эти условия типа Pole IS NOT NULL
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.01.2013, 14:31   #3
Jopses
Пользователь
 
Регистрация: 03.02.2012
Сообщений: 39
По умолчанию

Прямо наводите на мысль)) Спасибо!
Jopses вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сеттлеретика, или «оцифрованный» мозг STRWRK Свободное общение 1 11.05.2012 22:32
delphi 2010, ibx, firebird - ошибка при StartTransaction или открытии view - db not open AutoHare БД в Delphi 0 17.11.2010 08:32
Rave reports 5.0 как создать Data View R11 Помощь студентам 1 06.12.2009 18:39
Кто хочет поломать голову!!! Slavca Общие вопросы C/C++ 3 22.09.2009 15:52
Над чем поломать голову ? alexBlack Свободное общение 74 01.02.2008 18:46