Includi ruolo di amministratore nella tabella utenti dalla tabella ruoli
Domanda
C'è un modo per interrogare tabella utenti in questo modo:
| id | username |
-----------------
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
e la tabella user_roles:
| id_user | id_role |
---------------------
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 2 |
| 3 | 1 |
assumendo quel ruolo con id = 1 è un ruolo di amministratore, per produrre risultati che assomiglia a questo:
| id | username | admin |
-------------------------
| 1 | user1 | Y |
| 2 | user2 | N |
| 3 | user3 | Y |
Credo che può essere fatto utilizzando le istruzioni SELECT nidificate, ma mi chiedevo se è fattibile utilizzando JOIN.
Modifica: Il valore della colonna di amministrazione non deve essere Y o N, può essere amministratore ruolo id (1) o NULL o qualsiasi altra cosa che mi permetta di sapere se l'utente è un amministratore
Soluzione
Vorrei provare questo:
select u.id, u.username, if (id_role is null, 'N', 'Y') as is_admin
from users u
left outer join user_roles r
on u.id = r.id_user and r.id_role = 1
Ma io non sono sicuro al 100%.
Altri suggerimenti
Bene, è possibile unire in questo modo, che vi darà la id_role
nel risultato.
SELECT u.*, r.id_role
FROM users u
LEFT JOIN user_roles r
ON u.id=r.id_user
È possibile aggiungere WHERE r.id_role=1
per ottenere solo gli amministratori, ecc.
Ma per ottenere l'admin come "Y" o "N" come si voleva, è possibile utilizzare un IF
se l'id_role è 1 o meno.
SELECT u.*, IF(r.id_role = 1, "Y", "N") as admin
FROM users u
LEFT JOIN user_roles r
ON u.id=r.id_user
select u.id_user, if(count(1) > 0, 'Y', 'N')
from user u left outer join user_roles ur on u.user_id = ur.user_roles
where ur.id_role=1
group by u.id_user
Non sto usando mysql, quindi basta googled ha il 'se' la funzione, se questo è sbagliato, sostituirlo con DECODE, COALESCE o simili.