count + group by j'ai un blemme!!

Eléphant du PHP | 164 Messages

14 juin 2006, 12:48

Bonjour,

J'ai une table ou je souhaite compter le nombre de personnes présente plusieurs fois dans cette meme table:

voici la requete que j'ai faite et je n'arrive pas a avoir ce que je veux, d'après des exemples cette syntaxe devrai fonctionner:

Code : Tout sélectionner

SELECT count(t.t_cid) as nb FROM transactions as t WHERE t.t_typeabo = 5 GROUP BY t.t_cid HAVING nb > 1
Seulement je recoi comme erreur le msg suivant : 'Invalid column name 'nb'.', la base de données utilisée est SQL SERVER.
Merci d'avance

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2006, 12:59

Il me semble qu'on ne peut pas utiliser les alias dans la clause Having pour SQL SERVER

Essaye de remplacer

Code : Tout sélectionner

HAVING nb > 1
par

Code : Tout sélectionner

HAVING COUNT(t.t_cid) > 1
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

Eléphant du PHP | 164 Messages

14 juin 2006, 13:08

yes ca marche, mais ca me renvoi pas le bon résultat.
Ca me renvoi les count de chaque personnes presente plus d'une fois.
Pour etre clair dans ma table j'ai une seule personne présente deux fois ds la table.La requete me renvoi 2 (le nombre de fois que la personne est dans lma table.)Je devrai recevoir 1

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2006, 13:15

est-ce que la personne qui est 2 fois dans la table a le même id ?
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

Eléphant du PHP | 164 Messages

14 juin 2006, 13:17

oui!
la structure de la table est la suivante:
champs 1: id transaction
champs 2: id de la personne

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2006, 13:20

Donc, ce que je voudrai savoir, c'est si t.t_cid est bine l'identifiant d'une personne dans la table transaction
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

Eléphant du PHP | 164 Messages

14 juin 2006, 13:21

oui tout à fait

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2006, 13:25

C'est normal, tu as 2 fois la même personne et si tu les comptes, tu as 2 occurences de cette personne donc COUNT(t.t_cid) retourne 2

Par contre, pour obtenir 1 ....
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

Eléphant du PHP | 164 Messages

14 juin 2006, 13:26

et oui c'est ce que j'essaye de faire depuis hier....

quel idée de compter le nombre de personne présentes plusieurs fois ds la même table!

Mammouth du PHP | 1353 Messages

14 juin 2006, 13:28

Tu ne peux pas caser un DISTINCT quelque part ?

SELECT DISTINCT COUNT ca marche pas ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2006, 13:30

je verrais bien une solution

Tu retourne simplement la liste des id en doublon et, en PHP, tu vois compte les lignes
$str_requete  = "SELECT DISTINCT t.t_cid
  FROM transactions as t
  WHERE t.t_typeabo = 5
  GROUP BY t.t_cid
  HAVING COUNT(t.t_cid) > 1";
$o_result = mysql_query($str_requete);
if ($mysql_num_rows($o_result) > 0) {
  echo "Doublons présents";
} else {
  echo "Pas de doublons";
}
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

Eléphant du PHP | 164 Messages

14 juin 2006, 13:45

ayé!!!!

Merci pour ton exemple en php seulement tout mes traitements doivent etre fait en procédure stokées.... et oui car il s'agit dune procédure stokées éxécutée par un job ki tourne la nuit......
Si je pouvais utiliser php crois moi j'aurai bien été heureux!!

merci

SELECT count(DISTINCT t.t_cid) FROM transactions t
WHERE t.t_typeabo = 5
GROUP BY t.t_cid
HAVING count(t.t_cid) > 1

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2006, 13:53

:shock: ca marche un DISTINCT dans un COUNT ?

T'est pas sous MySQL, toi ...

EDIT : effectivement, je ne sais pas pourquoi je me suis mis en tête que tu travaillais sous MySQL vu que tu ne me l'a jamais dit

Bon bah désolé
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

Eléphant du PHP | 164 Messages

14 juin 2006, 13:59

sisi regarde plus haut j'ai ecri que je travaillais sous SQL SERVER :evil:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2006, 14:10

Excuse moi j'ai du mélanger avec un autre post.

C'est ça d'aider plusieurs personnes en même temps :langue:
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