PHP mysql选择数组并检查值是否存在

标签 php mysql

我有这个 MySQL 表:

tab

我想从哪里获取每个平台的数量(windows、linux、mac、未知)。

注意表中没有 macunknown 数据,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/

相关文章:

PHP 我应该在 ob_start 之后使用 ob_clean

php - 中间件,检查 Laravel 5 后如何重定向

php - 从 MySQL 中的相同(随机)记录中选择 2 列的最快方法是什么?

php - SQL_MODE 不适用于 MySQL 5.7.18

php - beanstalkd 和hadoop 集成有什么好的方法吗?

Mysql版本5.6 jar版本5.1

php - 将数组存储在sql数据库中

javascript - 处理获取ajax json请求的php

mysql - SQL LIKE 用于数字搜索

php - 使用sql查询从多个表中搜索数据