如何用php实现sql的分组?

nr9pn0ug  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(357)

我想从数据库表中选择行,并使用php而不是基于参数(在本例中是按项)的sql对它们进行分组。
sql语句:

Clothes table

 id  item     owner
 1   shoes     joe 
 2   pants     joe
 3   hat       joe
 4   pants     joe
 5   hat       tom

SELECT * from Clothes where owner='joe'

 1   shoes     joe 
 2   pants     joe
 3   hat       joe
 4   pants     joe

下面是我希望使用php而不是sql的结果 GROUP BY item PHP:

1   shoes     joe 
 2   pants     joe   //count 2
 3   hat       joe

我肯定有一个php数组函数,我只是不熟悉,想法?

z4iuyo4d

z4iuyo4d1#

最简单的方法是利用数组键的唯一性:

$grouped = array();

while ($row = $db->fetchResult()) {  // or however you get your data
    if (isset($grouped[$row['item']])) {
        $grouped[$row['item']]['count']++;
    } else {
        $grouped[$row['item']] = $row + array('count' => 1);
    }
}
qyuhtwio

qyuhtwio2#

使用pseucode实现数据库访问功能,我认为这应该可以:

$sql = "SELECT * from Clothes where owner='joe'";
$res = query($sql);
$arr = array();    

while ($row = $res->fetch())
{
    $arr[] = $row['item'];
}

$arr = array_unique($arr);

您应该注意,这可能会为您提供一个“稀疏数组”(换句话说,键中可能有间隙)。正如在评论中所说的,如果您有选择的话,通常最好在sql中这样做。即使这意味着要执行两个类似的查询。

9rygscc1

9rygscc13#

function group($items, $field) {
    $return = array();

    foreach ($items as $item) {
        $key = $item[$field];

        if (isset($return[$key])) {
            $return[$key]['count']++;
        } else {
            $return[$key] = $item;
            $return[$key]['count'] = 1;
        }
    }

    return $return;
}

print_r(group($results, "item"));

相关问题