[PHP]: résultat erroné d'un select

Résolu/Fermé
Fuu - 13 nov. 2008 à 11:05
 Fuu - 14 nov. 2008 à 13:33
Bonjour,

J'ai une requête SELECT qui le bon résultat excepté une ligne où il me met 1 à la place de 0.
Pourtant la requête est bonne , j' en ai bien vérifié les conditions!

A quoi est du un résultat erroné en général et que dois je vérifier?

Merci pour votre aide!
A voir également:

3 réponses

Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906
13 nov. 2008 à 11:21
Salut,
A quoi est du un résultat erroné en général et que dois je vérifier?
beh dans 100% des cas c'est la requête qui est mauvaise ou du moins qui ne correspond pas à ce qu'on veut.
Un sgbd te renverra toujours le résultat de la requête que tu lui soumets (on ne prend pas en compte les versions beta! ^^)

Donc là pas le choix, il faut décortiquer cette requête.
Si tu utilises mysql, vas dans phpmyadmin et copie colle ta requête pour voir les erreurs affichées.
0
Oui, c'est exactement ce que je fais depuis hier soir. Effectivement, je suis sur Mysql, et voici ma requête, si tu peux y voir qqc :D:

select mes_projets.*, etudiant.name, etudiant.surname, criteret.is_conform
from
mes_projets, etudiant, critere,
where
AND mes_projets.projet_id= 3 AND critere.projet_id= 3
AND critere.etudiant_id = etudiant.id
AND mes_projets.etudiant_id= etudiant.id
AND critere.etudiant_id=mes_projets.etudiant_id
group by mes_projets.start_date ;

le souci réside dans le champ: is_conform
Sur une ligne il me mets 1 à la place de 0. A part cela, tout est bon!
J'ai essayé order by is_conform, mais ça n'a rien changé!
0
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906 > Fuu
13 nov. 2008 à 11:38
Il n'y a pas un "t" en trop dans ta première ligne:

criteret.is_conform
0
Fuu > Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020
13 nov. 2008 à 11:40
c une faute de frappe , car j'ai pas fais de copier coller!
Mais à part ce dont j'ai parlé il n'y a pas d'autres souci ;)
0
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906 > Fuu
13 nov. 2008 à 11:52
Ok alors regarde directement dans la base de données si ces valeurs correspondent bien.
Sinon quelle est l'erreur affichée par phpmyadmin?
0
Fuu > Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020
13 nov. 2008 à 11:59
Justement, il n'y a pas d'erreur générée!
J'ai bien ma table avec les valeurs correspondantes sauf pour une ligne dans le champ is_conform où il mets 1 à la place de 0, car normalement je dois avoir pour ce champ soit des 1 soit des 0!
C'est à dire que si je n'avais pas vérifié dans mes tables, je ne m'en serais même pas aperçue, que c pas la bonne valeur pour cette ligne!
0
developper_man Messages postés 44 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 14 novembre 2008 5
13 nov. 2008 à 12:09
le problème est dans le groupe by !!! :)

enlève le group by, et vérifie ta ligne ;)

en fait quand tu fait un group by,il faut préciser quoi faire aux autre champ, est ce une sommation, prendre le premier ou le dernier ou la moyenne ....

bon courage
0
au fait quand je supprime le group by, j'ai des doublons, et pour chaque ligne doublé, il mets 1 et 0 respectivement avec dans le champ is_conform.

Le group by avait résolu le problem des doublons, mais j'ai à la place celui précité dans mes messages précédents!
0
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906 > Fuu
13 nov. 2008 à 14:06
effectivement le "group by" permet de supprimer les doublons.
Mais il faut préciser le champ sur lequel tu te bases pour supprimer tes doublons.
Exemple si tu veux avoir le résultat pour chaque étudiant, tu devrais faire un "group by etudiant.id".
Perso je comprends pas bien pourquoi tu te bases sur mes_projets.start_date (= la base de lancement des projet?)
0
Fuu > Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020
13 nov. 2008 à 14:24
au fait, pour cette requête, je dois avoir la liste des étudiants non conforme dans un projet par rapport à une date donnée.
J'avais au début essayer de mettre group by etudiant.id, mais ça me donne une seule ligne.
Je connais à l'avance le résultat qui doit être affiché, car je vérifie sur les tables où se font la sélection.
Seul group by start_date me sort quasi le "bon résultat" mais avec une ligne "erronée".

Je viens de m'apercevoir en parcourant le résultat sans "group by start_date" en suivant le conseil de Developper_man
qu'avec le group by start_date, il m'affiche les premières lignes des doublons, cad qu'il ne fait que supprimer la ligne double.

et par coincidence, je ne constate mnt qu'une seule ligne erronée, alors que dans d'autres cas il se pourrait que tout le résultat ne soit pas bon!

En somme , je pense que ma requête n'est pas bien faite...mais je sais pas y remédier :(
0
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906 > Fuu
13 nov. 2008 à 14:34
Effectivement, c'est pas la bon angle d'attaque.
Si tu as la date donné alors il vaut mieux rajouter une condition : start_date = MaDate
Sinon, récupère dans une première requête la list des dates.
Et ensuite rajoute dans ta requete : start_date in (date1,date2...)
0
Fuu > Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020
13 nov. 2008 à 14:52
Il faut p'etre que j'explicite un peu plus le problème et pour le moment j'oublie les dates :) car c lié à des fonctions dans un fichier php.

Dans la table mes projets, j'ai les champs suivants: id, projet_id, etudiant_id, start_date et end_date.
Dans la table etudiant, y a : id, prenom, nom
Dans la table critere, y a :id, projet_id, etudiant_id, is_conform

Objet de la requête:
Il faut afficher la liste etudiant_id conforme (is_conforme) avec leur nom et prénom , start_date et end_date , mais pas tous les étudiants!! uniquement ceux qui se trouvent dans la table mes projets et suivant le projet choisi.

J'ai cru mettre ces conditions dans ma requête, mais il s'avère que j'ai omis un truc.....ou y a un machin qui ne va pas!


Merci
0
developper_man Messages postés 44 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 14 novembre 2008 5
13 nov. 2008 à 17:22
excusez moi, mais, quand je vous ai dis que le probleme est dans le group by, c'etait pour dire que la requete comment elle est faite avec le group by va vous donner des resultat erroné :)
et je crois que vous devez vous posez la question : qu'est ce que je veux avoir en sortie? "
d'une manière précise, le comment de la chose viendra simplement,

donne nous la structure des tables (juste les colonne clé ) et exprime ta question.
je vous donnerai la requete ou les requetes qu'il faut :)
bon courage
0
merci pour ta réponse.

comme je viens de le dire à Zempachi :En sortie, pour un projet donné, je voudrais les conformités pour chaque date.

les principales tables avec leurs champs figurent dans mon 13 message de ce post.

Si tu veux davantage de précisions, je t'en fournirai!

Merci encore
0
developper_man Messages postés 44 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 14 novembre 2008 5 > Fuu
14 nov. 2008 à 12:54
bonjour, désolé pour le retard de ma réponse.
coté conception de la base de données, je crois que tu as un problème :)

je ne vois pas l'utilité d'avoir une table qui se nomme critère !! il suffit d'avoir un champ critère dans la table projets .

dans le cas ou un projet est fait par plusieurs étudiants, alors c'est la table projet qui est erroné; il ne faut pas avoir la colonne id_etudiant dans la table projets .

si j'ai bien compris le projet, tu as deux cas
1) un projet est fait par un seul étudiant, et un étudiant peut faire plusieurs projets :
la structure des tables sera comme ceci :
projets: projet_id, etudiant_id, start_date et end_date,is_conform
étudiant: id, prénom, nom

2) est fait par 1 ou plusieurs étudiants et chaque étudiant peux faire plusieurs projets (la propriété is_conform est liée à l'étudiant et au projet associé)
la structure des tables sera comme ceci :
projets: projet_id, start_date et end_date
projet_etudiant : etudiant_id,projet_id,is_conform
étudiant: etudiant_id, prénom, nom

bon, je te demande d'exprimer le besoin des tables avant même d'arriver aux requêtes ;)
0
Fuu > developper_man Messages postés 44 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 14 novembre 2008
14 nov. 2008 à 13:33
Merci bcp pour ta réponse!

Voilà, j'ai pu enfin résoudre ce problème: Dans la table critere, y a un champ que j'ai omis de citer, c "is_key_student", qui veut dire si l'étudiant est une personne clé ou pas dans le projet.
La table mes_projets ne comportent que des étudiants clés.
Mais il fallait bien le préciser dans la condition de ma requête.
C'est fait, et ça marche maintenant!

Merci encore pour toutes vos réponses et votre aide!!
0