2010-03-05 5 views
0

J'ai un table où je compte si un utilisateur a atteint un certain nombre de pénalités comme 3, donc si la portée de l'utilisateur ou dépasser les 3 points, il est interdit:Compte la somme d'une valeur de colonne dans une instruction SELECT

table_warnings 
- id 
- user_id 
- warning 
- warning_date 

id user_id  warning warning_date 
1  5478  1   2010-02-25 12:59:00 
2  5478  1   2010-02-28 08:27:00 
3  5478  2   2010-03-01 22:44:11 

J'ai started this question, où l'utilisateur KM m'a aidé à fine une solution d'un SELECT comme celui-ci:

SELECT COUNT(warning) 
FROM table_warnings AS w 
INNER JOIN table_users AS u 
ON w.user_id = u.user_id 
WHERE w.user_id = 5478 AND warning_date >= '2010-02-05 12:59:00' 
HAVING COUNT(warning) >= 3 

Puis-je trouver un moyen pour un SELECT pour récupérer le nombre de points penality l'utilisateur a eu dans les 30 derniers jours?

+0

D'où vient ce champ 'warn_penalty'? Vous ne le montrez pas dans vos exemples de données. Est-ce la même chose que «avertissement»? –

+0

désolé, mon erreur – vitto

Répondre

5

Quelle est la colonne "warn_penalty". Puis-je supposer que c'est la même chose que "avertissement"? Si c'est le cas, changez simplement COUNT() en SUM(). Avec quelques corrections supplémentaires pour éliminer la deuxième table:

SELECT user_id, SUM(warning) 
FROM table_warnings 
WHERE warning_date >= '2010-02-05 12:59:00' 
GROUP BY user_id 
HAVING SUM(warning) >= 3 

retournera tous les utilisateurs qui sont interdits.

Sinon, si vous avez un user_id et que vous souhaitez savoir s'il est interdit ou non:

SELECT SUM(warning) 
FROM table_warnings 
WHERE user_id = 5478 AND warning_date >= '2010-02-05 12:59:00' 

et vérifier le résultat.

+0

exactement, merci pour l'aide – vitto