Requête sur deux tables problème champ / chaine

WRInaute occasionnel
Help!! je cherche mais rien à faire je trouve pas la solution

voilà c'est une requête sur deux tables, dans base1, il y a un champ avec une liste de numéros de produit séparés par des virgules, et dans l'autre, catalogue, avec le numéro de produit et le numéro de l'image du produit.

Le but c'est de récupéré tous les enregistrement de la table catalogue qui sont présent dans le champ produits de la base1

SELECT base1.produits,catalogue.refproduit,catalogue.imageproduit FROM base1 INNER JOIN catalogue ON catalogue.refproduit IN (base1.produits) LIMIT 300

Cette requête fonctionne pour tous les enregistrements qui ont un seul produit dans base1.produits (exactement égal), parce que les champs qui ont plusieurs produits dans base1.produits (exemple 2345,23467,3456,4567) ne marchent pas, IN ne fait pas son travail car dans la requête sql voit ça comme un champ, et non pas une chaine... Comment m'en sortir?
 
WRInaute accro
La bonne solution c'est d'avoir une table intermédiaire pour faire la jointure entre les deux tables.

Genre:
base1: (id, autres champs)
catalogue: (id, autres champs)
table_de_jointure: (id_base1, id_catalogue)

Sinon avec mysql je ne crois pas que ce soit possible. Avec postgresql ça se fait sans problème avec = ANY(regexp_split_to_array(champ,delimiteur)) par exemple, mais je ne crois pas que l'équivalent existe sur mysql (et c'est de toutes façons généralement moins performant que la table intermédiaire si tu as les bons index là où il faut).

Jacques.
 
WRInaute occasionnel
Cette table de jointure, j'étais justement entrain de la faire... et avec succès, cela veut dire que j'ai finalement un bon instinct... :D merci pour ta réponse...
 
Discussions similaires
Haut