16 votes

MySQL.. Renvoyer '1' si un COUNT renvoie quelque chose de supérieur à 0

Je suis en train de créer une requête MySQL qui retourne essentiellement vrai ou faux. J'aimerais exécuter

SELECT COUNT(id) 
  FROM comments  
 WHERE comment_date >= 1306904400 
   AND user_id = 1 

Donc si l'utilisateur a posté dans le forum 10 fois ce mois-ci, je voudrais qu'il renvoie simplement 1, sinon je voudrais qu'il renvoie 0 pour indiquer qu'il ne l'a pas fait.

Est-il possible de le faire efficacement en SQL?

32voto

mu is too short Points 205090

Si vous ne vous souciez pas des choses spécifiques à MySQL, vous pouvez utiliser IF:

select if(count(id) >= 10, 1, 0)
from comments
where comment_date >= 130690440
  and user_id = 1

Ou les booléens MySQL (qui sont 1 pour vrai et 0 pour faux) :

select count(id) >= 10
from comments
where comment_date >= 130690440
  and user_id = 1

Si vous préférez rester dans le SQL standard, alors CASE est votre ami :

select case when count(id) >= 10 then 1 else 0 end
from comments
where comment_date >= 130690440
  and user_id = 1

16voto

Xint0 Points 4671

Utilisation de CASE :

SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS `flag`
FROM `comments`
WHERE `comment_date` >= 1306904400 AND `user_id` = 1

4voto

Michael Dean Points 836

Vous n'avez pas besoin de compter tous les enregistrements correspondants, il suffit de trouver s'il en existe un. Malheureusement, MySQL ne semble pas prendre en charge IF EXISTS comme le fait Microsoft SQL Server. Cependant, vous pouvez utiliser une sous-sélection avec LIMIT pour le simuler:

SÉLECTIONNER COUNT(1) AS a_comments FROM (SÉLECTIONNER id DE commentaires WHERE comment_date >= 1306904400 AND user_id = 1 LIMIT 0, 1) t;

1voto

Jack Points 159

Je sais que ce fil de discussion est ancien, mais voici une autre façon d'accomplir ceci :

SELECT COUNT(id), 1 % (1 + count(id)) as greaterThanZero FROM comments WHERE comment_date >= 1306904400 AND user_id = 1

0voto

jcomeau_ictx Points 15736

Peut-être:

SELECT (SELECT COUNT(id) FROM comments  
WHERE comment_date >= 1306904400 AND user_id = 1) > 10

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X