2014-11-27 3 views
0

У меня есть три таблицы в БД MySQL, как следоватьЧтобы упростить запрос MySQL?

`пользователей (id_user - 99911, имя пользователя - Heman, статус - менеджер)

обслуживания (id_service - 11, service_name - блабла)

auth_service (id_user - 99911, id_service - 11)

Все эти три таблицы не являются реляционными. Я хочу просто сделать это в PHP-коде. Я попробовал несколько запросов для отображения служб, которые разрешены пользователю, который является только менеджером.

select s.service_name from service s 
    inner join auth_service a on s.id_service = a.id_service 
    inner join users u on a.id_user = 99911 
order by s.service_name and u.status='manager'; 

, но он отображает несколько раз за одни и те же записи. В чем проблема? Как избежать повторного отображения одних и тех же записей?

+0

Они не родственники? Поэтому просто совпадение состоит в том, что auth_service имеет столбцы, которые, как представляется, «относятся» к другим таблицам. SQL - это язык * структурированного запроса *. Ключ в заголовке! – Strawberry

ответ

-1

Используйте пункт GROUP BY.

select DISTINCT s.service_name from service s 
    inner join auth_service a on s.id_service = a.id_service 
    inner join users u on a.id_user = 99911 
order by s.service_name and u.status='manager'  
+0

GROUP BY может работать, и он может даже быть выполненным. Но он несет риск (если возникнет вопрос) о возврате неопределенных результатов. Модификатор DISTNCT SELECT является правильным решением здесь. – Strawberry

0

Следующий запрос предоставляет вам все услуги, которые разрешены пользователями, являющимися менеджером.

select distinct s.service_name, a.id_user 
from service s inner join auth_service a 
on s.id_service = a.id_service 
where a.id_user in (select id_user from users where status = 'manager') 
order by s.service_name 
Смежные вопросы