Vous n'êtes pas identifié(e).

#1 19/10/2014 11:48:59

CHR
Membre

JOIN sur une partie du champ

Bonjour,

J'ai une table qui contient par exemple trois champs : ID, User, Roles_ID.
Une deuxième qui contient les Roles : Roles_ID, Détail

Dans la table 1, un user peut avoir plusieurs roles, séparés par une virgule.
Exemple : "1; chr; 1,3,7", "2; bvh; 2,7", "3; lmh; 7"

Dans la table 2, les roles listés avec leurs id.
Exemple : "1; Sortir", "2; Rentrer", "3; Manger", "4; Dormir", "5; Travailler", "6; Voyager", "7; Etudier"

J'ai besoin d'une query qui me donne :
1 - Sortir - 1 (chr)
2 - Rentrer - 1 (bvh)
3 - Manger - 1 (chr)
4 - Dormir - 0 (-)
5 - Travailler - 0 (-)
6 - Voyager - 0 (-)
7 - Etudier - 3 (chr, bvh, lmh)

J'imagine que c'est tout bête, j'avais pensé à un JOIN mais je ne sais pas si le JOIN accepte autre chose qu'un = et si oui, comment le formuler.

D'avance merci pour votre aide !
Bon dimanche !
chr

Hors ligne

#2 25/10/2014 08:12:33

PmGs7
Membre

Re : JOIN sur une partie du champ

Bonjour CHR,

c'est pas tout bête, car on touche à la structure même des bases de données relationnelle.

La table 1 est pensée 'saisie facile' mais elle ne peut pas être liée à la table 2, le seul moyen pour faire un lien est d'avoir une table 1 ( ID_user, user ) et une table 3 ( iD_user, ID_role )

et donc pour répondre à la question :

1) on garde la structure avec 2 tables , donc sans cohérence ( cad on paut saisir dans table 1 un id_role qui n'existe pas dans table 2 ) et on passe par une fonction ( pgsql par exemple ) et non une requête

2) on modifie la structure avec 3 tables, et on gagnera la cohérence, la possibilité de répondre à la question avec un sql mais il faudra 'complexifier' la saisie.

Bon WE.

Hors ligne

Pied de page des forums