Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
SELECTпри плавающих условиях (maystrenko) 22/02/2010 - 14:26:51
      Re: SELECT при плавающих условиях ( ) 22/02/2010 - 19:03:20



From: maystrenko - 22/02/2010 - 14:26:51
Subject:SELECTпри плавающих условиях
-----------------
Здравствуйте!
Нужна помощь...
Задача:
из нескольких таблиц выбрать данные при условиях:
1 Если пользователь с указанными логином и паролем только 1 в БД
2 если хотя бы у одной группы, в которых состоит пользователь есть доступ к ресурсу
3 если есть доступ к ресурсу у нескольких групп и с разными датами окончания, то выбрать по следующим правилам:
- если пустое (null), то берём только его - это без ограничений по времени
- если нет доступа без ограничения, то берём максимальную дату MAX()

Что у меня работает по отдельности:

SELECT
`db_table_acl`.`resourse_id`,
`db_table_acl`.`acl_id`,
`db_table_acl`.`expiried`
FROM
`db_table_acl`
WHERE
`db_table_acl`.`user_group_id` IN (
SELECT
`db_table_users_groups_sostav`.`group_id`
FROM
`db_table_users_groups_sostav`
WHERE(
`db_table_users_groups_sostav`.`user_id` IN (
SELECT
`db_table_users`.`id`
FROM
`db_table_users`
WHERE (
(`db_table_users`.`login` = 'login')
AND (
`db_table_users`.`password` = 'password')
)
)
)
)

этот запрос выдаёт все варианты доступа к ресурсам указанным группам и даты окончания их доступа

если добавить к этому запросу:

AND (`db_table_acl`.`expiried` IS null)

то получим только доступ без ограничений...

ВОПРОС:
как объяснить mysql, чтобы он выбирал данные при условии, что если есть null, то только его и показывал, а если нет null, то выбирал максимальное значение даты окончания срока доступа из всех для разных групп пользователя, у которых есть доступ?

нашёл вариант с IF
по идее должно быть в конце основного щапроса условие типа:

AND IF(
(0),
(`db_table_acl`.`expiried` IS null),
(`db_table_acl`.`expiried` = '1'))

НО! оно не работает
и потом вместо
(`db_table_acl`.`expiried` = '1')
останется только указать максимальное значение MAX()

Спасибо


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
36824



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |