Используйте pdo fetch_group, чтобы сохранить количество sql как отдельные переменные

Я пытаюсь сделать sql COUNT с php PDO :: FETCH_GROUP, чтобы избежать использования трех отдельных запросов sql

$genders = $db->query('SELECT COUNT(memberID), gender FROM members WHERE gender IS NOT NULL GROUP BY gender')->fetchAll(PDO::FETCH_GROUP);

Массив для этого выглядит так:

Array ( [3] => Array ( [0] => Array ( [gender] => Female [0] => Female ) [1] => Array ( [gender] => Male [0] => Male ) ) [2] => Array ( [0] => Array ( [gender] => Unknown [0] => Unknown ) ) )

И хотя я могу напечатать это, используя foreach в другом цикле foreach, это не совсем то, чего я хочу.

Я также попытался использовать bindColumn с циклом while:

$stmt = $db->prepare('SELECT m.gender, COUNT(*) as count FROM members m WHERE m.gender IS NOT NULL GROUP BY m.gender');
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_BOUND);
$stmt->bindColumn('count', $count);
$stmt->bindColumn('gender', $gender);
while ($row = $stmt->fetch())
{
echo $gender.' - '.$count.' ';
}

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

например $ femaleCount, $ maleCount, $ unknown и т. д.

1

Решение

Вместо FETCH_GROUP вам нужно PDO :: FETCH_KEY_PAIR. Ссылка на мою статью, где я перечислил все режимы получения, объясняя их назначение и возможное использование.

$sql = 'SELECT gender, COUNT(*) FROM members WHERE gender IS NOT NULL GROUP BY gender';
$data = $db->query($sql)->fetchAll(PDO::FETCH_KEY_PAIR);
foreach ($data as $gender => $count)
{
echo "$gender - $count\n";
}
2

Другие решения

Я воспользуюсь вашим вторым запросом и немного его поменяю. В целом, ваши запросы в порядке, но вы должны использовать Associative array сохранить ваши данные в нем, а затем использовать его в своем коде.

Запрос будет выглядеть так:

$strSQL = 'SELECT gender, COUNT(*) as member_count FROM members WHERE gender IS NOT NULL GROUP BY gender';

Поскольку вы не передаете никакую переменную в свой запрос, пользователю нет необходимости prepare просто используйте простой query

Так что код будет таким:

$arrMembers = array();

$strSQL = 'SELECT gender, COUNT(*) as member_count FROM members WHERE gender IS NOT NULL GROUP BY gender';
$result = $db->query($strSQL);
while($row = $result->fetch(PDO::FETCH_ASSOC))
$arrMembers[$row['gender']] = $row['member_count'];

Теперь у вас есть массив с именем $arrMembers со всеми возвращенными записями формируют запрос в нем. Ключ каждой строки массива — «пол», а значение строки — «количество членов».

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

echo $arrMembers['Female']; // Will print number of female members
echo $arrMembers['Male']; // Will print number of male members
echo $arrMembers['Unknown']; // Will print number of members with unknown gender
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector