MySQL .. Возвращает '1', если COUNT возвращает что-либо больше 0 - PullRequest
13 голосов
/ 04 июня 2011

Я пытаюсь создать запрос MySQL, который по сути возвращает true или false.Я хотел бы запустить

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

Так что, если пользователь разместил на форуме 10 раз в этом месяце, я бы хотел, чтобы он возвращал только 1, в противном случае я хотел бы, чтобы он возвратил 0, чтобы указать, что онине имеет.

Возможно ли это эффективно в SQL?

Ответы [ 6 ]

26 голосов
/ 04 июня 2011

Если вы не возражаете против специфичных для MySQL вещей, вы можете использовать IF:

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

Или MySQL booleans (1 для true и 0 для false):

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

Если вы хотите придерживаться стандартного SQL, тогда CASE ваш друг:

select case when count(id) >= 10 then 1 else 0 end
from comments
where comment_date >= 130690440
  and user_id = 1
11 голосов
/ 04 июня 2011

Использование CASE:

SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS `flag`
FROM `comments`
WHERE `comment_date` >= 1306904400 AND `user_id` = 1
2 голосов
/ 04 июня 2011

Вам не нужно считать все подходящие записи, просто найдите, если они существуют.К сожалению, MySQL не поддерживает IF EXISTS, как Microsoft SQL Server.Однако вы можете использовать подвыбор с LIMIT, чтобы подделать его:

SELECT COUNT(1) AS has_comments FROM (SELECT id FROM comments WHERE comment_date >= 1306904400 AND user_id = 1 LIMIT 0, 1) t;
1 голос
/ 05 августа 2016

Я знаю, что это старая ветка, но вот еще один способ сделать это:

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

0 голосов
/ 01 июля 2013

Я использую LIMIT, чтобы сделать что-то подобное, и просто оцениваю это в своем коде.SQL остановится после нахождения 10 совпадений.

SELECT id FROM {mytable}
WHERE comment_date >= 1306904400
AND user_id = 1
LIMIT 10

PHP запрашивает минимум 10 сообщений.

if(my_db_query() != 10)
    not_enough_posts();
0 голосов
/ 04 июня 2011

возможно:

SELECT (SELECT COUNT(id) FROM comments  
WHERE comment_date >= 1306904400 AND user_id = 1) > 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...