我有一个基于查询结果的数组:
array(5) {
[1] => array(5) {
["user_id"] => int(659)
["auth_id"] => string(28) "uhhuhhoney"
["username"] => string(10) "MarkH"
["avatar_date"] => int(1374525025)
["gravatar"] => string(0) ""
}
[2] => array(5) {
["user_id"] => int(326)
["auth_id"] => string(9) "rabits"
["username"] => string(9) "HankHill"
["avatar_date"] => int(1398866942)
["gravatar"] => string(0) ""
}
[3] => array(5) {
["user_id"] => int(326)
["auth_id"] => string(28) "identity_iml"
["username"] => string(9) "HankHill"
["avatar_date"] => int(1398866942)
["gravatar"] => string(0) ""
}
[4] => array(5) {
["user_id"] => int(1)
["auth_id"] => string(28) "barney"
["username"] => string(12) "Alice"
["avatar_date"] => int(1407362848)
["gravatar"] => string(0) ""
}
[5] => array(5) {
["user_id"] => int(1)
["auth_id"] => string(28) "a65s564sfad56654fsad"
["username"] => string(12) "Alice"
["avatar_date"] => int(1407362848)
["gravatar"] => string(0) ""
}
}
我希望能够合并任何具有相同user_id的条目,这将合并数组键“auth_id”。现在我有点困惑,不知道是否可以通过MySQL或PHP实现。
我尝试使用GROUP_CONCAT函数通过MySQL来合并相似内容,但它只能将每个auth_id合并到单个行中。
查询如下:
SELECT mumble.*, user.username, user.avatar_date, user.gravatar,
GROUP_CONCAT(mumble.auth_id)
FROM xf_mumble AS mumble
LEFT JOIN xf_user AS user ON (user.user_id = mumble.user_id)
ORDER BY mumble.user_id DESC, user.username
如果无法通过MySQL实现,那么我该如何通过PHP有效地实现呢?因为我想不到一个好的方法来做这件事。我正在考虑以下方案:
$results = array();
for (new $i = 0, $i < sizeof($query), $i++)
{
if (array_key_exists($query[$i - 1]) && $query[$i - 1]['user_id'] = $query[$i]['user_id'])
{
$results[$i]['auth_id'][] = $query[$i]['auth_id'];
}
}
谢谢!
explode
,例如explode(',', $query[$i]['auth_id'])
。 - Matt Brownegroup_concat()
。如果没有group by
,MySQL 将返回恰好一行 -- 所有匹配行的串联。您似乎想要每个user_id
一行,这就是为什么需要group by
。 - Gordon Linoff