我有这个 MySQL 表:
我想从哪里获取每个平台的数量(windows、linux、mac、未知)。
注意表中没有 mac
或 unknown
数据,num 将为 0
条件:
- 顺序必须与想要的输出一致
- 检查平台是否在表中,如果不在输出中加零
问题:如何在查询中排序以获得所需输出中的顺序,如果表中没有平台则添加零?
想要的输出:
array (
'0' => array('name' => 'windows', 'num' => 3),
'1' => array('name' => 'linux', 'num' => 3),
'2' => array('name' => 'mac', 'num' => 0),
'3' => array('name' => 'unknown', 'num' => 0)
);
我的尝试:
PHP:
function get_platforms() {
$query = "
SELECT platform, COUNT(platform) AS num
FROM stats
GROUP BY platform
ORDER BY platform ASC
";
$select = mysqli_query($this->c, $query);
while ($row = mysqli_fetch_array($select)) {
$data[] = array(
'name' => $row['platform'],
'num' => $row['num']
);
}
return $data;
}
当前输出:
array (
'0' => array ('name' => 'linux', 'num' => 3)
'1' => array ('name' => 'windows', 'num' => 3)
);
最佳答案
因为你的数据库中没有任何mac或未知数据,你不会得到这个平台的任何结果,甚至不是0。你可以做的是有一个预配置的数组,其中包含你期望得到的平台:
$data = array(
'windows' => 0,
'linux' => 0,
'mac' => 0,
'unknown' => 0
)
现在在您的 get_platforms
函数中执行此操作:
function get_platforms() {
$query = "
SELECT platform, COUNT(platform) AS num
FROM stats
GROUP BY platform
ORDER BY platform ASC
";
$select = mysqli_query($this->c, $query);
while ($row = mysqli_fetch_array($select)) {
$data[$row['platform']] = $row['num'];
}
return $data;
}
你会得到这样的结果:
$data = array(
'windows' => 3,
'linux' => 3,
'mac' => 0,
'unknown' => 0
)
然后您可以按照您想要的方式重新格式化数据。例如你可以这样做:
$result = array();
foreach($data as $platform => $count){
$result[] = array('name' => $platform, 'count' => $count);
}
您最终会得到与您要求的格式相同的结果。
关于PHP mysql选择数组并检查值是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21382691/