Alors voilà, j'ai la requête ci-dessous qui est (censé) me retourner un résultat unique, or il me retourne chaque résultat en double.
La requête
SELECT
`prod`.`numSerie`,
`prod`.`reference`,
`prod`.`debut_garantie_constructeur`,
`prod`.`fin_garantie_constructeur`,
`cat`.`designation`,
`cat`.`fin_support`,
`cat`.`fin_vie`,
`marc`.`nom_marche`,
`cont`.`libelle`,
`cont`.`date_debut`,
`cont`.`date_fin`,
`cons`.`nom_constructeur`,
`proj`.`nom_projet`,
`proj`.`rang_projet`,
`pers`.`nom_personne`,
`pers`.`prenom_personne`,
`pers`.`telfixe`,
`pers`.`tel`,
`pers`.`mail`,
`persG`.`nom_personne`,
`persG`.`prenom_personne`,
`persG`.`telfixe`,
`persG`.`tel`,
`persG`.`mail`,
`persC`.`nom_personne`,
`persC`.`prenom_personne`,
`persC`.`telfixe`,
`persC`.`tel`,
`persC`.`mail`,
`liv`.`date_bl`,
`liv`.`id_bl`
FROM
produit prod
LEFT JOIN marche marc ON
`prod`.`id_marche` = `marc`.`id_marche`
LEFT JOIN contrat cont ON
`prod`.`id_contrat` = `cont`.`id_contrat`
LEFT JOIN constructeur cons ON
`prod`.`id_constructeur` = `cons`.`id_constructeur`
LEFT JOIN livraison liv ON
`prod`.`id_produit` = `liv`.`id_produit`
LEFT JOIN projet proj ON
`liv`.`id_projet` = `proj`.`id_projet`
LEFT JOIN personne pers ON
`proj`.`id_cdp` = `pers`.`id_personne`
LEFT JOIN personne persG ON
`proj`.`id_gest` = `persG`.`id_personne`
LEFT JOIN personne persC ON
`proj`.`id_cdp_client` = `persC`.`id_personne`
LEFT JOIN catalogue cat ON
`prod`.`reference` = `cat`.`reference`
WHERE
UCASE(`prod`.`numSerie`) = UCASE(:numSerie)
Je ne comprends pas pourquoi j'ai chaque résultat en double à chaque fois.
Merci d'avance
- Edité par AlexisJacob1 31 juillet 2019 à 13:59:46
Aucune question n'est idiote, surtout quand Google n'a pas la réponse.
Bonsoir à tous, désolé de mon absence, congés obliges
philodick a écrit:
Bonjour,
Et qu'est-ce qui n'est pas normal dans le fait d'avoir les résultats en double ? Tout dépend de ce qu'il y a dans tes tables.
Non, ce n'est pas normal, car par exemple un numéro de série n'apparaît qu'une seul fois dans la table puisqu'il estthéoriquement unique. En tout cas, il l'est parce que j'en ai inséré qu'un seul.
florianboy01 a écrit:
Bonsoir,
je ne suis encore qu'apprenti mais par définition, un N° de série est un N° unique.
peut-être que mettre DISTINCT(`prod` . `numSerie`) résoudrait ton problème
C'est juste une idée de débutant ...
et pour info, on ne sais pas ce que tu as déjà essayé, enfin moi, je ne suis pas devin .... lol !
- Edité par florianboy01 10 août 2019 à 22:04:23
Eh bien, oui et non, c'est là qu'est la difficulté. En théorie, un numéro de série est unique, seulement c'est déjà arrivé que l'on ai plusieurs fois le même numéro de série sur plusieurs équipements différents. Pour faire "simple", cela arrive quand la génération de deux numéros de série sont lancés à la même microseconde (ça viens du constructeur de l'équipement).
Aucune question n'est idiote, surtout quand Google n'a pas la réponse.
La table livraison semble être une table de relation entre projet et produit ... Un produit peut être livré sur plusieurs projets et un projet peut contenir plusieurs produits ...
Si un produit a plusieurs livraison, alors tu récupéreras une ligne par livraison ... donc rien d'anormal à avoir plusieurs lignes pour le même produit ...
La table livraison semble être une table de relation entre projet et produit ... Un produit peut être livré sur plusieurs projets et un projet peut contenir plusieurs produits ...
Si un produit a plusieurs livraison, alors tu récupéreras une ligne par livraison ... donc rien d'anormal à avoir plusieurs lignes pour le même produit ...
Bonjour,
Je comprends bien, le problème c'est que j'obtiens deux lignes strictement identiques, avec le même numéro de BL...
Aucune question n'est idiote, surtout quand Google n'a pas la réponse.
Plusieurs livraison pour le même produit avec le même id_bl est possible selon ce modèle. Tu devrais rajouter num_bl dans le SELECT de ta requête pour vérifier si ce n'est pas cela qui "doublonne".
Il manque aussi le id_produit dans ton SELECT ... si tu as encore des doublons, cela signifie que tu as deux id_produit différents avec les mêmes données (référence, numéro de série, dates, etc.).
Le résultat donne cela (désolé, je peux pas donner plus):
Et voici la requête :
SELECT
`prod`.`id_produit`,
`prod`.`numSerie`,
`prod`.`reference`,
`prod`.`debut_garantie_constructeur`,
`prod`.`fin_garantie_constructeur`,
`cat`.`designation`,
`cat`.`fin_support`,
`cat`.`fin_vie`,
`marc`.`nom_marche`,
`cont`.`libelle`,
`cont`.`date_debut`,
`cont`.`date_fin`,
`cons`.`nom_constructeur`,
`proj`.`nom_projet`,
`proj`.`rang_projet`,
`pers`.`nom_personne` AS nom_cdp,
`pers`.`prenom_personne` AS prenom_cdp,
`pers`.`telfixe` AS telfixe_cdp,
`pers`.`tel` AS tel_cdp,
`pers`.`mail` AS mail_cdp,
`persG`.`nom_personne` AS nom_gest,
`persG`.`prenom_personne` AS prenom_gest,
`persG`.`telfixe` AS telfixe_gest,
`persG`.`tel` AS tel_gest,
`persG`.`mail` AS mail_gest,
`persC`.`nom_personne` AS nom_cdpc,
`persC`.`prenom_personne` AS prenom_cdpc,
`persC`.`telfixe` AS telfixe_cdpc,
`persC`.`tel` AS tel_cdpc,
`persC`.`mail` AS mail_cdpc,
`liv`.`num_bl`,
`liv`.`date_bl`,
`liv`.`id_bl`
FROM
produit prod
LEFT JOIN marche marc ON
`prod`.`id_marche` = `marc`.`id_marche`
LEFT JOIN contrat cont ON
`prod`.`id_contrat` = `cont`.`id_contrat`
LEFT JOIN constructeur cons ON
`prod`.`id_constructeur` = `cons`.`id_constructeur`
LEFT JOIN livraison liv ON
`prod`.`id_produit` = `liv`.`id_produit`
LEFT JOIN projet proj ON
`liv`.`id_projet` = `proj`.`id_projet`
LEFT JOIN personne pers ON
`proj`.`id_cdp` = `pers`.`id_personne`
LEFT JOIN personne persG ON
`proj`.`id_gest` = `persG`.`id_personne`
LEFT JOIN personne persC ON
`proj`.`id_cdp_client` = `persC`.`id_personne`
LEFT JOIN catalogue cat ON
`prod`.`reference` = `cat`.`reference`
WHERE
ucase(`prod`.`numSerie`) = ucase(:numSerie)
Aucune question n'est idiote, surtout quand Google n'a pas la réponse.
Oui pardon, j'ai oublié de donner le contenu des colonnes ...
EDIT: J'ai fini par trouver le problème. Il s'avère que c'est mon collègue qui avait mal paramétré le serveur SQL (me demandez pas comment j'en sais rien ^^). Merci en tout cas !
- Edité par AlexisJacob1 4 septembre 2019 à 17:13:54
Aucune question n'est idiote, surtout quand Google n'a pas la réponse.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.