2013-07-04 3 views
0

У меня проблема с моим скриптом php, который подсчитывает записи столбца id, которые соответствуют определенному идентификатору вопросника. Результаты кажутся довольно антисоциальным и просто не хотят, чтобы группа по некоторым причинам ....Группа по id не группируется в php

 $sql30 = <<<SQL 
    SELECT id, COUNT(id) 
    FROM `QuestionnaireAnswers` 
    WHERE questionnaireID='$questionnaireID' 
    GROUP BY id 
    SQL; 
    if(!$result30 = $db->query($sql30)){ die('There was an error running the query [' . $db->error . ']');} 
    while($row30 = $result30->fetch_assoc()){ 
     if ($row30['COUNT(id)'] == '' OR $row30['COUNT(id)'] == '0'){$numberofresponses = '0';} 
     else {$numberofresponses = $row30['COUNT(id)'];}  
    echo '<td>'.$numberofresponses.'</td>'; 
    } 

Если я использую образец questionnaireID из 1327809154 и выполнить следующий запрос в PHPMyAdmin:

SELECT id, COUNT(id) 
FROM `QuestionnaireAnswers` 
WHERE questionnaireID = '1327809154' 
GROUP BY id 
LIMIT 0 , 30 

я получаю следующие результаты:

id COUNT(id) 
129 1 
130 1 
131 1 
132 1 
133 1 
134 1 
277 1 
278 1 
280 1 
281 1 
282 1 
284 1 
290 1 
419 1 
424 1 
425 1 
426 1 

так ..... это, кажется, подсчет результатов, но не группируя их, чтобы дать мне в общей сложности .........

EDIT, я теперь изменил его:

 $sql30 = <<<SQL 
    SELECT questionnaireID, COUNT(questionnaireID) 
    FROM `QuestionnaireAnswers` 
    WHERE questionnaireID='$questionnaireID' 
    GROUP BY questionnaireID 
    SQL; 
    if(!$result30 = $db->query($sql30)){ die('There was an error running the query [' . $db->error . ']');} 
    while($row30 = $result30->fetch_assoc()){ 
     if ($row30['COUNT(questionnaireID)'] == '' OR $row30['COUNT(questionnaireID)'] == '0'){$numberofresponses = '0';} 
     else {$numberofresponses = $row30['COUNT(questionnaireID)'];} 
    echo '<td>'.$numberofresponses.'</td>'; 
    } 

Это возвращает:

questionnaireID COUNT(questionnaireID) 
1327809154 17 

это работает в PHPMyAdmin, но почему-то ничего не возвращается в мой сценарий, столбец таблицы, где счетчик должно быть пустым.

ответ

1

Ваши идентификаторы уникальны, поэтому их нельзя сгруппировать. Только равные значения группируются вместе, и их количество суммируется.

+0

ahh Я вижу, так что было бы лучше сгруппировать с помощью questionnaireID? –

+0

Хорошо, что, похоже, работает в phpmyadmin, если я использую questionnaireID, так как он возвращает 17, но по какой-то причине в моем выпуске скрипта у меня все еще есть пустой столбец в моей таблице. –

+0

Да, если вам это нужно в результате. В противном случае вы можете просто выбрать 'COUNT (id)'. – joe776

2

Ты запрос просто получать все идентификаторы и поскольку каждый из них уникален, его отображает отсчет до 1 для каждого из них, вместо того, чтобы получить подсчет количества ответов просто использовать

SELECT COUNT(id) FROM `QuestionnaireAnswers` 
WHERE questionnaireID = '1327809154' 
+0

, так как 'count (id)' дает вам количество идентификаторов, которые являются количеством ответов для этого опроса – kevinm

+0

Я отредактировал свой вопрос с последними результатами –

0

Ок, iv отсортировал его сейчас, причина, по которой он не работал после редактирования, потому что я не определял вопросникID в цикле while. $ questionnaireID = $ row ['questionnaireID'];

0

Это возвращает количество различных значений, отличных от NULL.

SELECT COUNT(DISTINCT `id`) 
FROM `QuestionnaireAnswers` 
WHERE questionnaireID = '1327809154' 

Вам не нужно GROUP BY, потому что у вас есть только один questionnaireID.

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