【问题标题】:How to merge MySQL query result with JSON format如何将 MySQL 查询结果与 JSON 格式合并
【发布时间】:2017-04-30 16:01:38
【问题描述】:

您好,我正在尝试以 JSON 格式合并 MySQL 结果的输出,但我很困惑如何做到这一点,所以我需要您的帮助,请告诉我如何完成这项工作,谢谢。

SQL:

$result = $db->sql_query("SELECT a.*,i.member_id,i.members_seo_name
    FROM ".TBL_IPB_USER." i 
    LEFT JOIN ".TBL_IPB_LA." a 
    ON a.member_id=i.member_id 
    WHERE i.".$column." = '".$val."' AND a.game = '".$game."'");

    while( $dbarray = $db->sql_fetchrow($result) ){
        $arr[] = $dbarray;
    }

    return ($arr);

我的查询的 JSON 格式的正常结果和输出是:

{
    "status": 200,
    "result": [
        {
            "member_id": "1",
            "member_name": "maxdom",
            "ip_address": "177.68.246.162",
            "session_onlineplay": "1",
            "sid": "IR63374a32d1424b9288c5f2a5ce161d",
            "xuid": "0110000100000001",
            "serialnumber": "9923806a06b7f700a6ef607099cb71c6",
            "game": "PlusMW3",
            "members_seo_name": "maxdom"
        },
        {
            "member_id": "1",
            "member_name": "maxdom",
            "ip_address": "81.254.186.210",
            "session_onlineplay": "1",
            "sid": "IR3cd62da2f143e7b5c8f652d32ed314",
            "xuid": "0110000100000001",
            "serialnumber": "978e2b2668ec26e77c40c760f89c7b31",
            "game": "PlusMW3",
            "members_seo_name": "maxdom"
        }
    ],
    "handle": "checkUSER"
}

但我想像这样合并输出和结果:

{
    "status": 200,
    "result": [
        {
            "member_id": "1",
            "member_name": "maxdom",
            "ip_address": [
                "177.68.246.162", 
                "81.254.186.210"
            ],
            "session_onlineplay": "1",
            "sid": [
                "IR63374a32d1424b9288c5f2a5ce161d",
                "IR3cd62da2f143e7b5c8f652d32ed314"
            ],
            "xuid": "0110000100000001",
            "serialnumber": [
                "9923806a06b7f700a6ef607099cb71c6",
                "978e2b2668ec26e77c40c760f89c7b31"
            ],
            "game": "PlusMW3",
            "members_seo_name": "maxdom"
        }
    ],
    "handle": "checkUSER"
}

【问题讨论】:

  • 合并背后的逻辑是什么?所有项目都应合并为一个项目,还是某些选项可能导致合并为多个项目?
  • 请注意,由于 WHERE 子句中的a.game = ...,您的 LEFT JOIN 将被转换为 INNER JOIN。

标签: php mysql


【解决方案1】:

你最好使用php作为你的解析器,防止数据库负载过高,这是示例代码

$result = $db->sql_query("SELECT a.*,i.member_id,i.members_seo_name
    FROM ".TBL_IPB_USER." i 
    LEFT JOIN ".TBL_IPB_LA." a 
    ON a.member_id=i.member_id 
    WHERE i.".$column." = '".$val."' AND a.game = '".$game."'");

	$arr = array();
    while( $dbarray = $db->sql_fetchrow($result) ){
		$item = $dbarray;
		$item['ip_address'] = array($item['ip_address']);
		$item['sid'] = array($item['sid']);
		$item['serialnumber'] = array($item['serialnumber']);
		
		$index = $dbarray['member_id'];
		
		if(isset($arr[$index]))
		{
			$arr[$index]['ip_address'] = array_merge($arr[$index]['ip_address'], $item['ip_address'];
			$arr[$index]['sid'] = array_merge($arr[$index]['sid'], $item['sid'];
			$arr[$index]['serialnumber'] = array_merge($arr[$index]['serialnumber'], $item['serialnumber']);
		} else {
			$arr[$index] = $item;
		}
    }

    return array_values($arr);

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2011-01-19
    • 2021-08-13
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多