2014-01-21 2 views
0

У меня есть таблица fb_requests. enter image description hereSql select query with count

Я хотел бы выбрать столбец game_selected на основе accept_status, если accept_status count < 4, я хочу выбрать эти строки. старался заставить его работать, пожалуйста, помогите мне решить эту проблему.

Это мой создать таблицу код

CREATE TABLE `fb_requests` (            
       `id` int(60) NOT NULL AUTO_INCREMENT,         
       `user_id` int(60) DEFAULT NULL,           
       `fb_user_id` varchar(255) DEFAULT NULL,         
       `request_id` varchar(255) DEFAULT NULL,         
       `game_selected` int(60) DEFAULT NULL,         
       `accept_status` int(60) DEFAULT NULL COMMENT '0 = pending 1 = accept', 
       `created_date` datetime DEFAULT NULL,         
       `modified_date` datetime DEFAULT NULL,         
       PRIMARY KEY (`id`)              
      ) ENGINE=MyISAM AUTO_INCREMENT=190 DEFAULT CHARSET=latin1  

Пробовал этот код. Я знаю, что он не синтаксически корректен, но попробовал.

Select 
    game_selected 
from 
    fb_requests 
where 
    user_id = 17 
    && 
    (
     count(accept_status =1) < 4 
    ) 
group by 
    game_selected; 

Заранее благодарен.

+1

Что бы вы хотели видеть? Опишите, что вы хотите достичь. – PeterRing

+0

Как правило, код 'CREATE TABLE' (размещен как текст, с несоответствующими столбцами опущен) и несколько запросов' INSERT INTO' с образцами данных более полезны, чем изображение ваших данных, поскольку оно позволяет потенциальным ответчикам фактически протестировать запрос. –

+0

Я хотел бы выбрать game_selected столбец на основе accept_status, если accept_status count <4 - Вы хотите счет accept_status или количество строк, где accept_status = 1? – grasshopper

ответ

1

Вы должны использовать HAVING SQL заявление с агрегатными функциями
Попробуйте

Select game_selected from fb_requests 
where user_id=17 
group by game_selected 
having count(accept_status)<4; 
+0

Спасибо за вашу помощь, ее работа, есть ли способ принять count (accept_status = 1) только – Dibish

+0

@Dibish да вы можете изменить инструкцию WHERE таким образом, чтобы user_id = 17 AND accept_status = 1 –

1

Попробуйте

Select game_selected from fb_requests 
    where user_id=17 
    group by game_selected 
    having count(accept_status)<4; 

Обновление:

Select game_selected from fb_requests 
    where user_id=17 and accept_status=1 
    group by game_selected 
    having count(accept_status)<4; 
+0

Большое вам спасибо за ваш быстрый ответ, как я могу выбрать accept_status = 1 записей с тем же запросом? Я имею в виду, что я хочу взять счет accept_status = 1 только – Dibish

+0

попробуйте часть обновления. –

1

Я думаю, его из-за совокупность f примите решение.

Select game_selected 
from fb_requests 
where user_id=17 
group by game_selected 
HAVING COUNT(accept_status) < 4; 
+0

Большое вам спасибо за ваш быстрый ответ, как я могу выбрать accept_status = 1 записей с тем же запросом? Я имею в виду, что я хочу принять count accept_status = 1 только – Dibish

1

Пожалуйста, попробуйте следующие запросы в соответствии с вашими требованиями

Select game_selected,count(accept_status) as as_cnt 
    from 
     fb_requests 
    where 
     user_id = 17 
    group by 
     game_selected 
having as_cnt < 4; 

ИЛИ

после запроса для только accept_status отмечен как '1'

Select 
     game_selected,sum(accept_status) as as_cnt 
    from 
     fb_requests 
    where 
      user_id = 17 
     group by 
      game_selected 
    having as_cnt < 4; 
+0

Это не сработает. В тех случаях, когда клаузулы могут использовать только существующие столбцы или комбинации (но не агрегации) существующих столбцов. ОК, я вижу, вы отредактировали это и использовали вместо этого. – grasshopper

+0

да, я изменил это –

+0

@YograjSudewad SudewadThank вас так много для вашего кода, в вашем втором запросе я не получаю accept_status = 1 count – Dibish

0

Выберите game_selected from fb_requests, где user_id = 17 group by game_selected имеет счетчик (accept_status) < 4;

+0

Большое вам спасибо за ваш быстрый ответ, как можно Я выбираю accept_status = 1 записей с тем же запросом? Я имею в виду, что хочу взять счет accept_status = 1 только – Dibish

1

Попробуйте ниже:

Select fbr1.game_selected,fbr1.* from fb_requests fbr1 JOIN 
(select id,accept_status from fb_requests where accept_status =1 limit 4) fbr2 
ON fbr1.id=fbr2.id where fbr1.user_id = 17; 

Позвольте мне знать, если вы не ищете результата извлеченной из выше запроса.

+0

Спасибо за ваш ответ. Не пробовал. Я попробую и дам вам знать. Ниже ответ работал для меня, поэтому я не пробовал этот ответ. Спасибо за помощь – Dibish