Bonjour,

Je cherche à faire une requête unique me retournant les résultats suivants :

Je construit des "fiches techniques" sur des vins.

Un vin est décrit par une liste de "champs variables", une fiche technique est composée d'une sélection de ces champs. La liste des "champs variables" étant évolutive, j'ai opté pour la structure suivante :

Table vins : ddd_vins
- V_NUM (clef unique)
- V_VIN (nom du vin)
- ...

Table noms des champs variables : ddd_champs
- CH_NUM (clef unique)
- CH_RANG (ordre d’affichage)
- CH_LIBELLE
- ...

Table champs variables : ddd_variable
- VA_NUM (clef unique)
- VA_VIN (vin : pointe sur ddd_vins.V_NUM)
- VA_CHAMP (champ : pointe sur ddd_champs.CH_NUM)
- VA_TEXTE (descriptif)
- ...
Et la composition des fiches

Table fiche : ddd_fiches
- F_NUM (clef unique)
- F_TITRE (titre de la fiche)
- F_VIN (vin : pointe sur ddd_vins.V_NUM)
- ...

Table champs variables utilisés pour la fiche : ddd_fiche_variable
- FV_NUM (clef unique)
- FV_FICHE (fiche : pointe sur ddd_fiches.F_NUM)
- FV_CHAMP (champ : pointe sur ddd_variable.VA_NUM)
Une fiche (ddd_fiches) comporte donc plusieurs enregistrements dans ddd_fiche_variable

Pour construire ou modifier une fiche technique d’un vin donné, j’ai besoin :
- de la liste complète des champs disponibles pour ce vin (table ddd_variable jointe à ddd_champs pour récupérer les intitulés et l’ordre d’affichage)
- de savoir quels champs font déjà partie de ma fiche technique (présence d’un enregistrement associé à la fiche dans ddd_fiche_variable)

J’ai donc construit la requête suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
SELECT * FROM ddd_variable
JOIN ddd_champs ON VA_CHAMP=CH_NUM 
LEFT OUTER JOIN ddd_fiche_variable ON VA_NUM=FV_CHAMP
WHERE VA_VIN={$ fiche['F_VIN']}
AND (FV_FICHE={$ fiche['F_NUM']} OR FV_FICHE IS NULL)
ORDER BY CH_RANG


Tout marche bien lorsque je n’ai qu’une fiche technique. Mais si j’en ai construit une autre, la requête ne retourne que :
- les champs variables associés à la fiche courante (enregistrements présents dans ddd_fiche_variable)
- les champs variables qui ne sont associés à aucune fiche

ex : si j’ai un champ intitulé « assemblage » sélectionné pour la fiche technique n°1, je ne le trouverai pas dans ma requête pour la fiche n°2.

J’attends de ma requête qu’elle me retourne la liste des champs variables disponibles pour ce vin (table ddd_variable) en sachant lesquels sont sélectionnés pour ma fiche (présents dans ddd_fiche_variable)

Merci de m’aider à finaliser cette requête, je tourne en rond depuis un bon moment.

Cordialement,

Antoine