Bonjour,

J'ai une table avec entre autre 4 champs texte ayant pour nom :
  • nom : le nom de la pièce
  • code : un code à 5 chiffres
  • inclus : un ou des codes à 5 et/ou 7 chiffres séparés par des virgules
  • exclu : un ou des codes à 7 chiffres séparés par des virgules


Tous les champs sont en VARCHAR.

Je cherche à faire une requête MySQL pour récupérer le nom du champ qui correspond aux critères demandés.

Exemple de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
nom;code;inclus;exclu
"piece1";"06226";"0622863,0625195";"0622671"
"piece2";"06228";NULL;"0622863"
"piece3";"06211";"06270,0620918";NULL
"piece4";"05921";NULL;NULL
Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT nom FROM `pièces` WHERE (code='06228' OR FIND_IN_SET('06228', inclus) OR FIND_IN_SET('0622863', inclus)) AND NOT FIND_IN_SET('0622863', exclu)
J'ai un résultat : "piece1".

Le problème qui se pose, c'est quand mon champ exclu est NULL, ma requête me retourne aucun enregistrement alors qu'il y en a...

Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT nom FROM `pieces` WHERE (code='05921' OR FIND_IN_SET('05921', inclus) OR FIND_IN_SET('0592102', inclus)) AND NOT FIND_IN_SET('0592102', exclu)
La requête formée comme ceci fonctionne dans ce cas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT nom FROM `pieces` WHERE code='05921' OR FIND_IN_SET('05921', inclus) OR FIND_IN_SET('0592102', inclus) AND NOT FIND_IN_SET('0592102', exclu)
J'ai un résultat : "piece4".

Comment puis-je faire pour que ma requête fonctionne dans tous les cas ?

Merci,
ZiP