pb avec les doublons

djoole
Invité n'ayant pas de compte PHPfrance

26 juil. 2005, 11:21

Bonjour à tous

Voila mon problème : je cherche à éliminer des doublons sur certains champs lors de ma requête, mais pas sur les autres ...


Je m'explique : en fait dans ma base j'ai ça

id centre zone nb_anomalies date
1 8v d8 0 2005-07-25
2 8v d8 4 2005-07-26
3 8v d8 6 2005-07-26
4 f 1k 0 2005-07-26
5 f vv 2 2005-07-26
6 f vv 4 2005-07-26


et je voudrais ça :

id centre zone nb_anomalies date
3 8v d8 6 2005-07-26
4 f 1k 0 2005-07-26
6 f vv 4 2005-07-26


Merci pour votre aide[/b]

ViPHP
pjl
ViPHP | 2119 Messages

26 juil. 2005, 11:24

regarde du coté de DISTINCT et de GROUP BY.

djoolio
Invité n'ayant pas de compte PHPfrance

26 juil. 2005, 13:32

mais avec le distinct on ne peut pas choisir sur quel champ il va agir et pas sur d' autres.

En fait : select distinct centre,zone,date.......

Ca va faire un distinct suivant ces trois champs alors que moi je veux qu'il le fasse que sur les deux premiers.

ViPHP
pjl
ViPHP | 2119 Messages

26 juil. 2005, 14:02

et GROUP BY ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 juil. 2005, 14:27

Et si tu fait

Code : Tout sélectionner

SELECT DISTINCT(centre, zone), date FROM ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

26 juil. 2005, 14:49

Et si tu fait

Code : Tout sélectionner

SELECT DISTINCT(centre, zone), date FROM ...
G déjà essayé ça et ça ne marche pas.

djoolio
Invité n'ayant pas de compte PHPfrance

26 juil. 2005, 15:01

En fait j'arrive à les récupérer grâce à un group by et un max en faisant :

Code : Tout sélectionner

SELECT centre,zone, MAX(id) AS id FROM MaTable GROUP BY centre,zone
Mais lorsque que je fais des jointures avec d'autres tables et que j'ai besoin d'un autre group by alors ça me fausse tout.

Si quelqu'un a une autre solution?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 juil. 2005, 15:03

mais avec le distinct on ne peut pas choisir sur quel champ il va agir et pas sur d' autres.

En fait : select distinct centre,zone,date.......

Ca va faire un distinct suivant ces trois champs alors que moi je veux qu'il le fasse que sur les deux premiers.
Donne nous une description un peu plus précise de ce que tu veux faire et on aura peut etre une idée ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

djoole
Invité n'ayant pas de compte PHPfrance

26 juil. 2005, 15:26

En fait j'ai une table Audit avec

id_audit centre zone nb_ano date_audit
1 8v d8 0 2005-07-25
2 8v d8 4 2005-07-26
3 8v d8 6 2005-07-26
7 f1 1k 0 2005-07-26
8 f vv 2 2005-07-26
9 f vv 4 2005-07-26

et par exemple pour les 3 premiers audit c'est le même mais il a évolué au cours du temps et j'ai besoin de garder l'historique.
Mais j'ai une autre table qui pour chaque audit je vois quel anomalie il a

id_audit id_ano
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
3 5
3 6
8 2
8 4
9 2
9 4
9 7
9 8

Au final ce que je voudrais c'est compter pour chaque id_ano combien il y en a

par exemple :
pour l'id_ano "4" j'en rencontrerais seulement que 2 fois

Je sais pas si c vraiment clair mais voila le problème dans sa totalité.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 juil. 2005, 15:35

Dans ton exemple, j'ai 4 enregistrements dont id_anno = 4 :shock:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

djoole
Invité n'ayant pas de compte PHPfrance

26 juil. 2005, 15:42

Désolé j'ai mal expliqué.
Mais en fait vu que chaque audit évolue au cours du temps au final ce qui m'intéresse dans la seconde table c'est son dernier état donc dans notre exemple l'audit 3 et l'audit 9.
Et la on s'aperçoit que l'id_ano "4" apparait deux fois.

Je sais si c un peu plus clair ou pas.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 juil. 2005, 15:49

Je suis désolé mais je ne comprend pas :shock:

Pourquoi 3 et 9 ? si l'état ne bouge pas, je dirais 2 et 9.

L'audit 3 à un 5 et 6 ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

djoole
Invité n'ayant pas de compte PHPfrance

26 juil. 2005, 16:00

id_audit centre zone nb_ano date_audit
1 8v d8 0 2005-07-25
2 8v d8 4 2005-07-26
3 8v d8 6 2005-07-26
8 f vv 2 2005-07-26
9 f vv 4 2005-07-26


id_audit id_ano
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
3 5
3 6
8 2
8 4
9 2
9 4
9 7
9 8
En fait l'id_audit change(au départ "8v d8" avait 0 anomalie puis il en a eu 4 et c'est devenu l'id_audit 2 puis il a eu 6 anomalie et c'est devenu l'id_audit 3) mais celui qui m'interesse c'est l'id_audit 3.
Donc dans ma seconde table quand je vais faire des calculs ça sera que sur l'id_audit 3 et l'id_audit 9.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 juil. 2005, 16:05

essaye ça :

Code : Tout sélectionner

SELECT id_audit FROM table GROUP BY centre HAVING id_audit=MAX(id_audit)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

26 juil. 2005, 16:09

Si tu veux c'est d'avoir en mémoire l'évolution d'un audit qui m'emmerde car je ferais un update et je changerais le nb_ano quand celui_ci changerait.
En laissant l'historique si je compte les différentes anomalies il me les répète à chaque fois que l'audit a évolué.