2

我想从数据库表中选择行并使用 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 数组函数,我只是不熟悉,想法?

4

3 回答 3

3

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

$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);
    }
}
于 2012-10-29T21:40:15.717 回答
1

使用伪代码进行数据库访问功能,我相信这应该可行:

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

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

$arr = array_unique($arr);

您应该注意,这可能会给您一个“稀疏数组”(换句话说,键中可能存在间隙)。正如评论中所说,如果您有该选项,通常最好在 SQL 中执行此操作。即使这意味着执行两个类似的查询。

于 2012-10-29T21:36:03.527 回答
0
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"));
于 2012-10-29T21:40:45.207 回答