我有一张MySQL表:

其中我想得到每个平台的计数(windows,linux,mac,未知)。
注意,表中没有mac或unknown数据,num中的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)
);发布于 2014-01-27 14:02:49
因为您的数据库中没有任何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);
}结果将以您所要求的相同格式结束。
发布于 2014-01-27 14:04:07
首先,您应该定义一个期望输出的顺序,假设您有数组。
$osList = array('linux', 'windows', 'mac', 'something');现在将mysql结果获取到临时assoc数组:
$data = array();
$query = "SELECT platform, COUNT(platform) AS num"
. " FROM stats"
. " GROUP BY platform";
$result = mysqli_query($this->c, $query);
while ($row = mysqli_fetch_array($result)) {
$data[$row['platform']] = (int) $row['num'];
}在这里,可以形成输出数组:
$output = array();
foreach ($osList as $os) {
$output[] = array(
'name' => $os,
'count' => isset($data[$os]) ? $data[$os] : 0
);
}发布于 2014-01-27 14:05:46
您必须有另一个表,其中列出了所有的平台。例如,我们将其命名为platforms,它有一个列platform_name,其中包含所有平台的唯一名称(包括mac),然后查询如下:
SELECT platforms.`platform_name`, COUNT(stats.`platform`) FROM `platforms`
LEFT JOIN `stats` ON platforms.`platform_name` = stats.`platform`
GROUP BY platforms.`platform_name`https://stackoverflow.com/questions/21382691
复制相似问题