我有一个查询:
$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
)
)
我需要得到以下计数:
每个响应的总计:是和否如是:成人总数儿童总数
我可以从查询中获取它,还是需要操纵该数组以获取计数?
您可以使用条件计数和求和。为此,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注入的攻击。您需要使用参数化的prepared statement。
您可以从当前查询中迭代结果数组,也可以从另一个查询中获取计数。
-- 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';
可能最好在准备好的语句中使用它们。