Можно ли упростить запрос

324
26 ноября 2016, 20:22

Доброе время суток,
Есть 3 табл.: «roles» (табл. c ролями), «roles_user» (связывающая табл), «user» (табл. c пользователями)
Мне нужно вытянуть всех пользователей с их ролями

Я создал запрос, который это делает:

SELECT tt1.*
       ,roles.name 
FROM ( 
       SELECT MAX(role_id) as maxrol
              ,tt.* 
       FROM (
              SELECT users.*
                     ,roles_users.role_id 
              FROM users 
              left join roles_users 
                   on roles_users.user_id = users.id 
              left join roles 
                   on roles_users.role_id = roles.id
            ) tt
       GROUP BY tt.id 
       ORDER BY tt.role_id
      ) tt1
left join roles 
     on tt1.maxrol = roles.id

Результат запроса:

Вопрос:
Можно ли его упростить?

Answer 1

Как то так (не проверял, ибо создавать таблицы по картинкам тяжело):

 SELECT U.*, R.name
   FROM users U
   LEFT JOIN (
        SELECT user_id, MAX(role_id) as maxrol
          FROM roles_users
         GROUP BY user_id
      ) RU ON RU.user_id=U.id
   LEFT JOIN roles R ON R.id=RU.maxrol
Answer 2

Можно как-то так написать:

SELECT 
  u.username,
  r.name
FROM
  users u,
  roles r,
  users_roles l
WHERE l.user_id = u.id
  AND l.role_id = r.id;
READ ALSO
Реализация фильтра по городам: лоигка и порядок действий

Реализация фильтра по городам: лоигка и порядок действий

Добрый день! Я только закончил изучение PHP и MySQL и сейчас тренируюсь с созданием первого сайтаМожете объяснить порядок создания фильтра по городам?...

308
Чем плохо возникновение ошибок в работе с БД?

Чем плохо возникновение ошибок в работе с БД?

ЗдравствуйтеУ меня есть база данных, в которой время от времени меняются столбцы(добавляются, удаляются)

312
Как вывести категории в тег Select

Как вывести категории в тег Select

Ребят как такой же скрипт поместить в тег SELECTЭтот скрипт у меня выводит категории на сайте

332
Подключение к удаленной базе через workbench

Подключение к удаленной базе через workbench

При попытке подключиться возникает вот такая ошибка:

410