Jointure entre deux tables avec un Champs texte

Eléphant du PHP | 66 Messages

31 janv. 2008, 14:12

Bonjour
J'ais un petit soucis au niveau d'une requete SQL...

Table1:

Code : Tout sélectionner

CREATE TABLE Table1 (Idgroup INT, NOmgroup VARCHAR(255), Utils VARCHAR(255))
Table2

Code : Tout sélectionner

CREATE TABLE Table2 (IdU INT, NOmU VARCHAR(255))
contenu Table 1:

Code : Tout sélectionner

1 | Group1 | 1,2 2 | Group2 | 2,3
contenu Table 2:

Code : Tout sélectionner

1 | Agent 1 2 | Agent 2 3 | Agent 3
Quand je selectionne un group je veux sortit tout les agents de ce Group sachant que chaque agent peut appartenir a plusieurs groupes...

J'ai pensé a cette requete:

Code : Tout sélectionner

SELECT ut.* FROM Table2 ut, Table1 grp WHERE grp.Utils LIKE 'ut.IdU,%' OR grp.Utils LIKE '%,ut.IdU,%' OR grp.Utils LIKE '%,ut.IdU'
mais biensure ça ne marche pas (c'était évident je sais lol )
quelqu'un a une idée s'il vous plait, je sais que la structure de la Table est fausse mais je dois faire avec malheureusement...

Et par la mm occasion si qq1 a un cours sur les "join" un peut plus explicite que celui de developpez.com

Merci beaucoup...
Mess With Best or die With the Rest

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

31 janv. 2008, 15:26

Regarde la fonction FIND_IN_SET() dans le manuel. Ta jointure ressemblera à

Code : Tout sélectionner

SELECT * FROM Table1 t1 JOIN Table2 t2 ON FIND_IN_SET(t2.IdU, t1.Utils)
Les performances de ce type de requête sont acceptables pour de petites tables (dizaines d'enregistrements) et deviennent quasi-exponentiellement pires au fur et à mesure que les tables grossisent. La requête deviendra lente avec un millier d'enregistrements et pratiquement inutilisable à partir d'un dizaine de milliers.
Et par la mm occasion si qq1 a un cours sur les "join" un peut plus explicite que celui de developpez.com
Regarde le forum des FAQs. Au fait, ce serait cool d'éviter les abbréviations SMS, on est plutôt allergiques par ici, merci.

Eléphant du PHP | 66 Messages

31 janv. 2008, 16:08

Merci pour votre aide, ça ne résoud pas mon problème. je dois respecter le LIKE sinon j'aurais des fausses réponses.

Sinon pour le language SMS, désolé.
Mess With Best or die With the Rest

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

31 janv. 2008, 16:39

Merci pour votre aide
Pas de problème. On peut se tutoyer si tu veux, c'est en général ce que l'on fait ici.
je dois respecter le LIKE sinon j'aurais des fausses réponses
Je pense que tu n'as pas lu le manuel de la fonction FIND_IN_SET(). Cette fonction fait précisément ce que tu recherches, contrairement à LIKE, qui est destiné à un usage différent.

Eléphant du PHP | 66 Messages

31 janv. 2008, 16:56

Merci
En fait j'ais mal compris, peut être parceque j'ai mis dans ma tête que c'était une fonction de recherche.

Exuse moi, t'a pas un lien d'aide pour comprendre les jointures...

Merci encore une fois
Mess With Best or die With the Rest