2013-09-16 3 views
3

Я пытаюсь получить общее представлений, я хочу 2 результатов, 1 представлений с особым статусом и 1 со всеми статусами:# 1242 - подзапрос возвращает более чем на 1 строку

SELECT submissions.campid, 
     COUNT(submissions.id) AS subsCountTotal, 
     (SELECT COUNT(submissions.id) 
     FROM submissions,campaings 
     WHERE submissions.campid = campaings.id 
     AND campaings.status = 1 
     and submissions.time >= campaings.startdate 
     and submissions.status = 10 
     GROUP BY submissions.campid) AS subsCountngood 
FROM submissions, campaings 
WHERE submissions.campid = campaings.id 
AND campaings.status = 1 
and CASE 
    WHEN campaings.enddate = '0000-00-00' THEN submissions.time >= campaings.startdate 
    ELSE submissions.time <= campaings.enddate 
END 
GROUP BY submissions.campid ` 

любой помощь будет оценен :) спасибо.

ответ

1

Ваш CASE должен привести к ошибке (или это расширение для MySQL)?

ИМХО нужно просто:

SELECT submissions.campid, 
     COUNT(*) AS subsCountTotal, 
     SUM(CASE WHEN submissions.status = 10 THEN 1 ELSE 0 END) AS subsCountngood 
FROM submissions, campaings 
WHERE submissions.campid = campaings.id 
AND campaings.status = 1 
AND 
( submissions.time <= campaings.enddate 
    OR 
    (campaings.enddate = '0000-00-00' AND submissions.time >= campaings.startdate) 
) 
GROUP BY submissions.campid 
1

Посмотрите на этот подзапрос

SELECT COUNT(submissions.id) 
FROM submissions,campaings 
WHERE submissions.campid = campaings.id AND campaings.status = 1 and submissions.time >= campaings.startdate and submissions.status = 10 
GROUP BY submissions.campid 

При группировке вы можете получить больше, чем одна группа т.е. более одного счета. Как вы можете добавить несколько значений в одну строку.

0
SELECT submissions.campid, 
     COUNT(submissions.id) AS subsCountTotal, 
     (SELECT COUNT(submissions.id) 
     FROM submissions,campaings 
     WHERE submissions.campid = outer_camp.id 
     AND campaings.status = 1 
     and submissions.time >= outer_camp.startdate 
     and submissions.status = 10 
     GROUP BY submissions.campid) AS subsCountngood 
FROM submissions outer_sub, campaings outer_camp 
WHERE submissions.campid = campaings.id 
AND campaings.status = 1 
and CASE 
    WHEN campaings.enddate = '0000-00-00' THEN submissions.time >= campaings.startdate 
    ELSE submissions.time <= campaings.enddate 
END 
GROUP BY submissions.campid 

Вам необходимо скорректировать подзапрос.

Смежные вопросы