|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 56 ![]() |
Bonjour à tous,
Voici mon problème, j'essaye de faire une requête afin de récupérer des informations des candidats qui ont laisser un cv sur le site. Le problème est que, dès que je rentre cette ligne dans la requête, l'un des 2 candidats disparait alors qu'il devrait être présent. Voici la requête : Code :
Code :
DISTINCT SUM(DISTINCT pt.temp_reel) AS total_xp Code :
Je vous fournis également la base de données en pièce jointe Merci d'avance pour l'aide, car je sèche dessus depuis ce matin ^^ Si vous avez des conseils pour optimiser ma requête, n'hésitez pas ^^ |
||||
|
|
00
|
|
|
#2 | |||
|
Membre habitué
![]() Robert LabrousseDéveloppeur décisionnel Inscription : février 2009 Messages : 79 ![]() |
Bonsoir,
Il n'y a pas de DISTINCT avec les fonctions d'agrégation. Je ne sais pas à quoi correspond vos attributs, ce qui pourrait nous aider à comprendre à quel niveau vous voulez agrégez vos données. De plus, ce n'est pas utile de mettre des alias sur des colonnes si c'est pour les renommer pareil Code :
__________________
Citation:
|
|||
|
|
10
|
|
|
#3 | ||
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Bonjour,
Dans ta requête, il y a des jointures qui ne servent à rien. Autant les retirer pour ne pas alourdir la syntaxe. Il manque également le GROUP BY, qui, compte tenu de ton schéma et du fait que tu es sous MySQL, peut se réduire au seul c.id (tous les autres champs du SELECT en dehors de la fonction SUM dépendant fonctionnellement de cet id). Ce qui donne la requête suivante : Code :
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
||
|
|
10
|
|
|
#4 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 56 ![]() |
merci pour vos réponses
les alias me servent dans la récupération php^^ pour cette ligne ci SUM(DISTINCT pt.temp_reel) J'ai mis distinct car la valeur était erronée, mais avec distinct elle l'est toujours :s si l'on regarde dans la table postule_experience_candidat pour pour le candidat n° 16 j'ai 1,18 pour pour le candidat n° 18 j'ai 4,16 sans le distinct j'obtiens pour pour le candidat n° 16 j'ai 57 pour pour le candidat n° 18 j'ai 18 avec le distinct j'obtiens pour pour le candidat n° 16 j'ai 19 pour pour le candidat n° 18 j'ai 18 alors que le 2eme candidat dans les 2 cas devrait me renvoyer 20 :/ la requête qui m'a permis d'avoir ces résultats est: Code :
|
||
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Saluton,
Est-ce que c.date_envois est le même pour toutes les lignes des c.id du GROUP BY ? De même, est-ce que s.id, a.fk_id_job, ec.fk_id_candidat, ne produisent pas, via les jointures, des doublons de pt.temp_reel dans le GROUP BY ?
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
10
|
|
|
#6 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 56 ![]() |
Ben en fait j'en sais absolument rien, j'ai jamais dépasse auparavant une jointure a 2-3 tables, et je n'ai jamais eu a faire à des doublons
avec cette requête Code :
id nom prenom Jour Mois Annee nom_secteur titre_annonce total_xp 18 dupont cedric 6 6 2011 Designer Senior Design Engineer HVAC 19 16 francis seb 6 6 2011 NULL NULL 18 si je retire le group by j'obtiens id nom prenom Jour Mois Annee nom_secteur titre_annonce total_xp 16 francis seb 6 6 2011 NULL NULL 37 il n'y a pas l'air d'avoir de doublons |
||
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Avec le GROUP BY, c'est sûr que tu ne risques pas de voir les doublons qui se cachent derrière les jointures.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
10
|
|
|
#8 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 56 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Si tu obtiens la même chose avec ou sans GROUP BY, ce dont je doute, pourquoi faire un GROUP BY ?
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
10
|
|
|
#10 | |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 56 ![]() |
Citation:
|
|
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
dans la deuxième requête si tu laisses SUM sans GROUP BY, ça devient du grand n'importe quoi.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
10
|
|
|
#12 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 56 ![]() |
c'est clair ^^ c est pas normale, il devrait me mettre le 2eme normalement :/ (c'était à la base le problème que j'avais)
Maintenant reste plus cas trouver d’où vient cette erreur de calcul :/ J'ai beau retirer group by et distinct, il me renvois aucun doublons |
|
|
00
|
|
|
#13 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Qu'en sais-tu ?
Quelle est au juste la requête ? PAr ailleurs, montre-nous un jeu d'essai de données sur les tables concernées.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
10
|
|
|
#14 | |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 56 ![]() |
Tout est dans post
La requête que je fais : Citation:
merci d avance |
|
|
|
00
|
|
|
#15 | ||
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Le total est juste compte tenu de la requête faite.
En fait, dans les données, pour un même job, il y a eu plusieurs annonces. C'est donc la jointure entre annonce et postule_candidat qui démultiplie le nombre de lignes. 2 solutions :
Pour la sous-requête, tu peux faire comme ça : Code :
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
||
|
|
10
|
|
|
#16 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2011 Messages : 56 ![]() |
Ça fonctionne!!!!!
Merci à tous pour votre aide et vos explications ![]() Et pour l'erreur de calcul, c'était de ma faute, je comptais le total des id au lieu du contenu 1-18 correspondait en fait à 1-17 (donc 18) et 16-4 à 15-4 (donc 19) Désolé pour cette immonde erreur d’inattention (à mon avis, je devais trop avoir la tête dans le cul à ce moment-là )
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com