如何使用mysql Php过滤记录

时间:2019-07-12 11:48:55

标签: php mysql

我正在使用mysql和Php,并且正在获取以下格式的数据

Array
(
    [country] => India
    [total] => 23
)
Array
(
    [country] => USA
    [total] => 1
)
Array
(
    [country] => Japan
    [total] => 1
)

我只希望如果任何国家/地区的总匹配项都应采用以下格式的相同数组

Array
(
    [country] => India
    [total] => 23
)
Array
(
    [country] => USA,Japan
    [total] => 1
)

这是我的mysql查询

SELECT country,COUNT(*) as total FROM doctors GROUP BY country ORDER BY COUNT(*) DESC

这是我的代码

<?php foreach ($data as $total) { 
echo "<pre>";print_R($total);
?>
<p><?php echo $total['country']; ?><?php echo $total['total']; ?></p>
 <?php } ?>

2 个答案:

答案 0 :(得分:3)

$countriesByTotal = [];

foreach ($data as $row) {
    $countriesByTotal[$row['total']][] = $row['country'];
}

foreach ($countriesByTotal as $total => $countries) {
    $countriesByTotal[$total] = [
        'country' => implode($countries, ','),
        'total'   => $total
    ];
}

$countriesByTotal = array_values($countriesByTotal); // optional

print_r($countriesByTotal);

结果:

Array
(
    [0] => Array
        (
            [country] => India
            [total] => 23
        )
    [1] => Array
        (
            [country] => USA,Japan
            [total] => 1
        )
)

rextester-demo

另一种方法是只使用GROUP_CONCAT()来更改SQL查询:

SELECT total, GROUP_CONCAT(country) as country
FROM (SELECT country,COUNT(*) as total FROM doctors GROUP BY country) sub
GROUP BY total
ORDER BY total DESC

答案 1 :(得分:2)

array_walk()可用于连接总数相同的国家/地区。

$data = [];
array_walk($array, function ($value) use (&$data) {
    $data[$value['total']] = isset($data[$value['total']])
        ? ['country' => "{$data[$value['total']]['country']},{$value['country']}", 'total' => $value['total']]
        : $value;
});

print '<pre>';
print_r($data);