Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос с JOIN
 
 автор: FaStY   (28.11.2008 в 22:44)   письмо автору
 
 

есть 4 таблицы,
fst_features - так называемые permissions Для пользователя. например редактирование новости и т.д.
fst_accounts- это пакеты, т.е. например VIP пакет- там пользователь может редактировать новости, добавлять комеентраии ну и все в этом роде... это я к примеру
fst_user_features - это связка пользователей с таблицей fst_features
fst_account_features - это связка fst_accounts и fst_features
fst_user_account - связка этих юзеров и fst_account_features

Вот в чем вопрос. я хосу одним запросов выдрать из базы все permissions для пользователя...т.е. пользователь может иметь несколько пакетов например VIP, EDITOR и т.д. ну в них естественно находиться несколько permissions, а так же пользователю может отдельно присваиваться обычные permissions. Подскажите как взять из базы все эти данные один запросом+ если например у пользователя нету никаких пакетов, но есть просто permissions, или наоборот- нет permissions, но есть пакеты. Вот сделал запрос:

Select 
*
 FROM fst_features  

RIGHT JOIN fst_user_features 
 ON (fst_user_features.features_id=fst_features.id and fst_user_features.user_id=1)

RIGHT JOIN fst_account_features 
 ON fst_account_features.features_id =fst_features.id  

LEFT JOIN fst_user_account
 ON (fst_user_account.account_id=fst_account_features.account_id 
 AND fst_user_account.user_id=1)

вот, что выводит :

id    key_name    name    value    description    id_1    user_id    features_id    id_2    account_id    features_id_1    id_3    user_id_1    account_id_1
                                                                                     1          1                  1         1         1            1

заранее спасибо

  Ответить  
 
 автор: MIchail1982   (29.11.2008 в 19:35)   письмо автору
 
   для: FaStY   (28.11.2008 в 22:44)
 

SELECT
  *
FROM
  `fst_account_features` INNER JOIN
  `fst_features` ON `fst_account_features`.`features_id` =
    `fst_features`.`features_id` INNER JOIN
  `fst_accounts` ON `fst_accounts`.`account_id` =
    `fst_account_features`.`account_id` INNER JOIN
  `fst_user_account` ON `fst_user_account`.`account_id` =
    `fst_accounts`.`account_id`
WHERE fst_user_account.user_id=1;

  Ответить  
 
 автор: FaStY   (30.11.2008 в 02:02)   письмо автору
 
   для: MIchail1982   (29.11.2008 в 19:35)
 

нет, не фачит... там несколько грамматических ошибок в коде у вас, но и когда их поправил, все равно не все показываеться((( может скинуть дамп базы?

  Ответить  
 
 автор: MIchail1982   (30.11.2008 в 11:49)   письмо автору
 
   для: FaStY   (30.11.2008 в 02:02)
 

да, скиньте дамп, тогда будет попроще

  Ответить  
 
 автор: FaStY   (30.11.2008 в 14:25)   письмо автору
6.2 Кб
 
   для: MIchail1982   (30.11.2008 в 11:49)
 

прикрепил.

  Ответить  
 
 автор: MIchail1982   (30.11.2008 в 20:39)   письмо автору
 
   для: FaStY   (30.11.2008 в 14:25)
 

в fst_user_features была запись 1,1,2 поставьте features_id=1 тогда 1 строчку выведет...
SELECT
  *
FROM
  `fst_features` INNER JOIN
  `fst_account_features` ON `fst_features`.`id` =
    `fst_account_features`.`features_id` INNER JOIN
  `fst_account` ON `fst_account_features`.`account_id` = `fst_account`.`id`
  INNER JOIN
  `fst_user_features` ON `fst_user_features`.`features_id` = `fst_features`.`id`
  INNER JOIN
  `fst_user` ON `fst_user`.`id` = `fst_user_features`.`user_id` INNER JOIN
  `fst_user_account` ON `fst_user_account`.`user_id` = `fst_user`.`id`
    AND `fst_user_account`.`account_id` = `fst_account`.`id`
WHERE
  `fst_user_account`.`user_id` = 1;

  Ответить  
 
 автор: FaStY   (30.11.2008 в 23:30)   письмо автору
 
   для: MIchail1982   (30.11.2008 в 20:39)
 

так мне и нужно, что бы там features_id=2, потому что features_id=1 уже есть в fst_account_features. т.е в таблице fst_user_features должны быть неповторяющиеся features_id с fst_account_features

  Ответить  
 
 автор: MIchail1982   (30.11.2008 в 23:54)   письмо автору
 
   для: FaStY   (30.11.2008 в 23:30)
 

%) полностью запутался в вашей структуре БД

  Ответить  
 
 автор: FaStY   (01.12.2008 в 00:07)   письмо автору
 
   для: MIchail1982   (30.11.2008 в 23:54)
 

есть права доступа, есть группы(к которым добавляються права доступа), есть юзер(которому могут назначать группы, а так же просто права).
Например;
у нас есть права доступа- доступ к админке(1), доступ для редактирования новостей(2), доступ для управления пользователями(3).
Мы создаем группу под названием "Модератор", в которую добавляем права: доступ к админке, доступ для редактирования новостей.
Есть пользователь Вася.
Добавляем к пользователю группу модератор. Теперь пользователь Вася может заходить в админку и редактировать новости.
Но в группе модератор нет возможности управления пользователями. Но мы хотим, что бы наш пользователь Вася мог редактировать пользователей. Так что мы к нашему пользователю, помимо группы модератор, добавляем права на управление.
Вот вроде такой замысел.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования