使用php从mysql获取所有(一对多)记录属于用户的数组

时间:2016-01-14 10:24:32

标签: php mysql

我有一张表格如下

user    category
1          157
1          158
2          158
2          159
3          157

使用PHP的必需输出是

[
    1 => [157,158],
    2 => [158,159],
    3 => [157]
]

一个解决方案可能是mysql&然后像这样运行foreach

foreach ($result as $row) {
    $finalResult[$row['user']][] = $row['category'];
}

但还有其他最佳方式吗?

1 个答案:

答案 0 :(得分:1)

使用GROUP_CONCAT()功能。

以下是参考资料:

所以你的查询应该是这样的:

SELECT user, GROUP_CONCAT(category SEPARATOR ',') AS categories FROM your_table GROUP BY user; 

输出:

+------+------------+
| user | categories |
---------------------
|   1  |  157,158   |
---------------------
|   2  |  158,159   |
---------------------
|   3  |    157     |
+-------------------+

<强>编辑:

// suppose $conn is your connection handler

$finalResult= array();
$query = "SELECT user, GROUP_CONCAT(category SEPARATOR ',') AS categories FROM your_table GROUP BY user";

if ($result = $conn->query($query)) {

    while ($row = $result->fetch_assoc()) {
        $finalResult[$row['user']] = explode(",", $row['categories']);
    }

}