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
相关产品推荐
相关产品推荐

