|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
36824
|
|