2017-04-30 13 views
0

こんにちは、私はJSON形式でMySQL結果の出力をマージしようとしていますが、どうやってこれを行うことができるのか混乱しています。 。MySQLのクエリ結果をJSON形式にマージする方法

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" 
} 

しかし、私は、出力をマージし、この1のようになりたい:

{ 
    "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" 
} 
+1

合併の背後にあるロジックは何ですか?すべてのアイテムを1つのアイテムにマージするか、いくつかのオプションで複数のアイテムにマージすることができますか? –

+0

WHERE句の 'a.game = ... 'のため、LEFT JOINはINNER JOINに変換されることに注意してください。 –

答えて

0

あなたのパーサーに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."'"); 
 

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

 
    return array_values($arr);

関連する問題