Группировать и считать выход PDO - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть запрос:

$myData = $db->query("
         SELECT * 
         FROM t1
         WHERE event = '$eid'
         ", PDO::FETCH_OBJ);

, который возвращает результаты в виде массива:

Array (
[0] => stdClass Object
    (
        [id] => 1
        [even] => 1
        [response] => NO
        [adult] => 
        [child] => 
    )

[1] => stdClass Object
    (
        [id] => 2
        [event] => 1
        [response] => YES
        [adult] => 1
        [child] => 3
    )
)

Мне нужно получить следующие значения:

Итого по каждому ответу: ДА и НЕТ Если ДА: Всего взрослых Всего детей

Могу ли я получить его из запроса или мне нужно манипулировать массивом, чтобы получить количество?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Вы можете использовать условный подсчет и сумму.Этот оператор CASE очень хорош.

SELECT 
    COUNT(CASE response WHEN 'YES' THEN 1 ELSE NULL END) as YesResponses, 
    COUNT(CASE response WHEN 'NO' THEN 1 ELSE NULL END) as NoResponses, 
    SUM(CASE response WHEN 'YES' THEN adult ELSE 0 END) as Adults, 
    SUM(CASE response WHEN 'YES' THEN child ELSE 0 END) as Children 
FROM t1

Однако обратите внимание, что ваш код уязвим для внедрения SQL.Вам нужно использовать параметризованные подготовленные операторы .

0 голосов
/ 27 сентября 2019

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

-- display count of YES responses and total adults and children
SELECT COUNT(*), SUM(adult), SUM(child) 
    FROM t1
    WHERE event = '$eid'
    AND response = 'YES';

-- display count of NO responses
SELECT COUNT(*)
    FROM t1
    WHERE event = '$eid'
    AND response = 'NO';

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

https://www.php.net/manual/en/pdo.prepare.php

https://www.php.net/manual/en/pdo.prepared-statements.php

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