2010-06-01 6 views
0

Une table dans ma base de données MySQL suit les jeux. Il a la structure suivante:structure de requête - ignorant les entrées pour le même événement de plusieurs utilisateurs?

SCENARIO_VICTORIES 
[ID] [scenario_id] [game] [timestamp] [user_id] [winning_side] [play_date] 

ID est la clé primaire auto. timestamp enregistre le moment de la soumission pour l'enregistrement. winning_side a l'une des trois valeurs possibles: 1, 2 ou 0 (signifiant un tirage)

L'une des requêtes effectuées dans cette table calcule le pourcentage de victoire pour chaque scénario, lorsque la page de ce scénario est affichée. La sortie est exprimée sous la forme:

  • Side 1% victoire
  • Side 2% victoire
  • Tirage%

et interrogé avec:

SELECT winning_side, COUNT(scenario_id) 
FROM scenario_victories WHERE scenario_id='$scenID' 
GROUP BY winning_side ORDER BY winning_side ASC 

puis transformé en la pourcentages et autres.

Désolé pour la configuration longue. Mon problème est le suivant: plusieurs de mes utilisateurs se jouent les uns les autres, et enregistrent leurs résultats mutuels. Donc, ces batailles sont doublement représentées dans les pourcentages de victoire et les résultats. Bien que cela arrive rarement, la base d'utilisateurs n'est pas grande et les entrées doubles ont un effet notable sur les données.

Étant donné la table et la requête ci-dessus - quelqu'un at-il des suggestions sur la façon dont je peux "réduire" les enregistrements qui ont le même play_date & game & scenario_id & winning_side afin qu'ils ne soient comptés qu'une seule fois?

+0

Pour commenter moi-même, je peux courir les résultats grâce à une boucle en PHP et filtrer les doublons, mais je me demandais si cela était possible uniquement au sein de MySQL ... – Drew

Répondre

1

Il est un peu tard, mais idéalement, vous devriez filtrer ces doublons lorsqu'ils sont insérés.

Cela dit, vous devriez être en mesure de faire une requête interne DISTINCT comme ceci:

SELECT winning_side, COUNT(scenario_id) 
FROM (
    SELECT DISTINCT play_date, game, scenario_id, winning_side 
    FROM scenario_victories 
    WHERE scenario_id = '$scenID' 
) 
GROUP BY winning_side ORDER BY winning_side ASC 
Questions connexes