[RESOLU] SQL SELECT éviter doublons sur 1 valeur

Eléphanteau du PHP | 18 Messages

18 août 2012, 21:12

Bonjour !

Voilà, je viens cette foi, pour trouver une solution sur une requêtte SQL :
$sql_score2 = mysql_query("SELECT * FROM " . MA_TABLE . " WHERE game_id = '" . $game_id . "'  AND user != '" . $user[0] . "' GROUP BY user ");
$nb_joueurs = mysql_num_rows($sql_score2);
$nb_joueurs=$nb_joueurs+1;
Donc, j'ai toutes les parties joué de tous les jeux et de tous les joueurs sur cette table.
Et je veu trouver le nombre total de joueur sur un jeu.
Sachant que (game_id = "le jeu") et (user = "le joueur").

Avec ma requette ci dessus, j'optien le nombre total de parties, or moi je veu que 5 parties du même joueur, fasse "1" et non "5" !

J'éspére que j'ai réussi à être suffisament explicite, car les explication, c'est pas mon fort.

Eléphant du PHP | 190 Messages

18 août 2012, 21:59

Salut,

C'est pas DISTINCT que tu cherches ?

http://www.w3schools.com/sql/sql_distinct.asp

;)

Eléphanteau du PHP | 18 Messages

18 août 2012, 22:07

Merci pour la propostion, mais j'ai déjà essayé, et ça change rien, DISTINCT va éviter les doublons sur toute la table, pas uniquement sur une valeur.

Eléphant du PHP | 190 Messages

19 août 2012, 11:26

Salut,

edit: post à oublier...

;)
Modifié en dernier par Zahnzao le 19 août 2012, 11:38, modifié 1 fois.

Eléphant du PHP | 190 Messages

19 août 2012, 11:36

Je me suis planté... après quelques tests je remarque que je raconte des conneries :p

DISTINCT s'applique à tout les champs séléctionnés dans ta requete.

Donc en placant un "SELECT * " qui est déconseillé, il fait un distinct sur tout tes champs.

Le truc c'est de savoir quels champs tu dois récupérer un petit schéma de ta table serait la bienvenue.

Sinon tu as FIRST() qui recupère seulement la première valeur du champ séléctionné.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 août 2012, 11:58

salut,

ou alors, on oublie pas que groupe by s'utilise seulement quand on une fonction "de groupe" (comme count(), max, avg etc .) dans le select.

donc déjà une requete comme :
select count(*) from table where condition group by user
devrait être plus ce que tu cherche :)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 18 Messages

19 août 2012, 16:44

Merci beaucoup, j'ai fais ça :
$sql_score2 = mysql_query("SELECT DISTINCT user FROM " . MA_TABLE . " WHERE game_id = '" . $game_id . "'  ");
$nb_joueurs = mysql_num_rows($sql_score2);
Et ça fonctionne trés bien !
En faite, c'était tout simple.