• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

overcloked

[resolvido] Duvida com query - newbie

5 mensagens neste tópico

Boas ppl,

Tenho as seguintes tabelas:

tab_Roles:

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| role_id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(255) | NO   |     | NULL    |                |
| module       | varchar(255) | NO   |     | NULL    |                |
| action       | varchar(255) | NO   |     | NULL    |                |
| description  | varchar(255) | NO   |     | NULL    |                |
| creationDate | datetime     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

tab_Users:

+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| user_id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| username      | varchar(255) | NO   |     | NULL    |                |
| password      | varchar(255) | NO   |     | NULL    |                |
| realname      | varchar(255) | NO   |     | NULL    |                |
| creationDate  | datetime     | NO   |     | NULL    |                |
| lastLogonDate | datetime     | NO   |     | NULL    |                |
| lastIpAddress | varchar(255) | NO   |     | NULL    |                |
| expireDate    | datetime     | NO   |     | NULL    |                |
| email         | varchar(255) | NO   |     | NULL    |                |
| disabled      | tinyint(1)   | NO   |     | 0       |                |
+---------------+--------------+------+-----+---------+----------------+

tab_user_roles:

+---------+---------+------+-----+---------+-------+
| Field   | Type    | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| role_id | int(11) | NO   | PRI | 0       |       |
| user_id | int(11) | NO   | PRI | 0       |       |
+---------+---------+------+-----+---------+-------+

Ora como já devem ter percebido estas tabelas servem para associar users a roles e roles a users.

A query para verificar quais as roles que um user tem é:

SELECT tab_roles.role_id, tab_roles.module, tab_roles.action, tab_roles.description
			FROM tab_users, tab_roles, tab_user_roles
			WHERE (tab_users.user_id = tab_user_roles.user_id AND tab_roles.role_id = tab_user_roles.role_id) AND tab_user_roles.user_id = $user_id

Agora precisava de uma query que me retorna-se todas as roles que não estão associadas a um determinado user.

Conseguem-me ajudar com isso, ainda sou um bocado pato em SQL....

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fácil:

SELECT * FROM tab_roles WHERE role_id NOT IN (SELECT role_id FROM tab_user_roles)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado saco, preciso mesmo de começar a ler umas coisinhas de SQL.

Já agora para retornar todas as Roles que um determinado user não tem posso fazer qq coisa do genero:

SELECT * FROM tab_roles WHERE role_id NOT IN (SELECT role_id FROM tab_user_roles WHERE user_id = 2)

certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado saco, preciso mesmo de começar a ler umas coisinhas de SQL.

Já agora para retornar todas as Roles que um determinado user não tem posso fazer qq coisa do genero:

SELECT * FROM tab_roles WHERE role_id NOT IN (SELECT role_id FROM tab_user_roles WHERE user_id = 2)

certo?

Exacto

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora