You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP查询优化:按user_id分组生成指定格式JSON数据

如何按user_id分组输出用户元数据的JSON结果

我来帮你调整代码实现按user_id分组的需求,原代码的问题在于没有对user_id进行分组处理,而是把所有键值对重复添加到数组里,导致输出不符合预期。下面是修改后的完整代码:

<?php
// 假设$con已经是有效的数据库连接
$sql = mysqli_query($con, "SELECT * FROM mohamiusermeta WHERE meta_key IN ('websiteurl', 'profile_photo', 'Office', 'address_user', 'agentarea', 'offertext', 'officename', 'cover_photo', 'membertype')");
$groupedData = array();

while($row = mysqli_fetch_assoc($sql)) {
    $userId = $row['user_id'];
    $metaKey = $row['meta_key'];
    $metaValue = $row['meta_value'];
    
    // 如果该user_id还没有分组,先初始化一个空数组
    if (!isset($groupedData[$userId])) {
        $groupedData[$userId] = array();
    }
    
    // 将当前元数据添加到对应user_id的分组中
    $groupedData[$userId][$metaKey] = $metaValue;
}

// 输出JSON结果,确保中文不转义
echo json_encode($groupedData, JSON_UNESCAPED_UNICODE);

// 关闭数据库连接(注意要传入连接对象)
mysqli_close($con);
?>

代码关键调整说明:

  • SQL优化:把多个OR条件改成IN子句,让SQL语句更简洁易读,执行效率也更高。
  • 分组逻辑:用user_id作为数组$groupedData的键,每个键对应的值是该用户的所有元数据键值对数组。
  • 避免重复初始化:通过isset()检查当前user_id是否已存在分组,不存在才创建空数组,确保每个用户的元数据都被收集到同一个数组下。
  • 修复连接关闭:原代码的mysqli_close()缺少连接参数,修改为mysqli_close($con)保证正确关闭连接。

最终JSON输出示例:

{
    "1": {
        "websiteurl": "https://example.com",
        "profile_photo": "avatar1.jpg",
        "Office": "New York"
    },
    "2": {
        "address_user": "123 Main St",
        "agentarea": "Downtown",
        "membertype": "Premium"
    }
}

这样输出的JSON就会以user_id为键,每个键下包含该用户所有对应的meta_key和meta_value键值对,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Mr.Balaha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:17:11