【问题标题】:MySql PHP Select JSON valueMySql PHP 选择 JSON 值
【发布时间】:2016-01-25 21:42:55
【问题描述】:

我有这个 SQL 查询。

$sql = "SELECT playerjson FROM `clans` WHERE playercount > ? AND level > ? AND score > ?";
$selectstmt = $con->prepare($sql);
$selectstmt->bind_param('iii',$playercountvar,$levelvar,$scorevar);
$selectstmt->execute(); //execute select statement 
$result = $selectstmt->get_result(); //get select statement results

playerjson 是一个大型 JSON 数组。

[
    {
        "avatar":{
            "userId":253404325847,
            "currentHomeId":253404325847,
            "userName":"enal",
            "role":"Member",
            "level":62,
            "league":8,
            "trophies":1707,
            "donatedTroops":0,
            "receivedTroops":0,
            "clanRank":1,
            "lastClanRank":2,
            "inWar":1
        }
    },
    {
        "avatar":{
            "userId":158925253577,
            "currentHomeId":158925253577,
            "userName":"Valen kamja",
            "role":"Leader",
            "level":54,
            "league":8,
            "trophies":1693,
            "donatedTroops":1054,
            "receivedTroops":2131,
            "clanRank":2,
            "lastClanRank":3,
            "inWar":1
        }
    },
    {
        "avatar":{
            "userId":296357929514,
            "currentHomeId":296357929514,
            "userName":"\u0645\u064c\u0648\u0646\u0633\u062a\u064d\u0631502",
            "role":"Member",
            "level":59,
            "league":7,
            "trophies":1568,
            "donatedTroops":0,
            "receivedTroops":0,
            "clanRank":3,
            "lastClanRank":0,
            "inWar":1
        }
    },
    {
        "avatar":{
            "userId":283468864924,
            "currentHomeId":283468864924,
            "userName":"tolzz",
            "role":"Co-Leader",
            "level":64,
            "league":7,
            "trophies":1312,
            "donatedTroops":34,
            "receivedTroops":456,
            "clanRank":4,
            "lastClanRank":4,
            "inWar":1
        }
    },
    {
        "avatar":{
            "userId":257703167804,
            "currentHomeId":257703167804,
            "userName":"hailery",
            "role":"Co-Leader",
            "level":58,
            "league":6,
            "trophies":1219,
            "donatedTroops":21,
            "receivedTroops":404,
            "clanRank":5,
            "lastClanRank":5,
            "inWar":1
        }
    },
    {
        "avatar":{
            "userId":210456177319,
            "currentHomeId":210456177319,
            "userName":"chey lie",
            "role":"Co-Leader",
            "level":79,
            "league":0,
            "trophies":1101,
            "donatedTroops":0,
            "receivedTroops":0,
            "clanRank":6,
            "lastClanRank":6,
            "inWar":0
        }
    }
]

我想要做的只是存储 useridcurrenthomeid 并将它们存储在一个数组中,该数组将在一个父数组中......

因为我需要获取子数组并将它们作为参数一一传递到 url。 explode 不会用这个吗?

我将如何实现这一目标?我还需要一种改进 SQL 语句的方法,这样我就不会像那样检索整个 JSON,因为它可能需要更长的时间?

【问题讨论】:

  • 我会给你写一些代码...等一下:-)

标签: php mysql arrays json


【解决方案1】:

你所拥有的是一个 json 编码的数组。所以用json_decode()解码吧。

    $arr1 = json_decode($result);

    foreach ($arr1 as $row) {
        echo $row->avatar->userId."-------".$row->avatar->currentHomeId."<br>" ;
    }

【讨论】:

  • 我想尽量避免获取整个 JSON 字符串,因为它可能需要更长的时间吗?
  • 你不想要所有数据??
  • 我只需要json数组中的userId和currentHomeId
  • 你需要所有用户ID和所有当前家庭ID??
  • 是的,我需要所有这些,但不需要 JSON 中的其余内容
【解决方案2】:

解码结果字符串并将其作为 stdClasses 进行迭代:

$json = json_decode($result);
$parent = array();
foreach($json as $item) {
    $parent[] = array('userId' => $item->avatar->userId, 'currentHomeId' => $item->avatar->currentHomeId);
}

echo '<pre>';
print_r($parent);
echo '</pre>';

将产生:

Array
(
    [0] => Array
        (
            [user] => 253404325847
            [currentHomeId] => 253404325847
        )

    [1] => Array
        (
            [user] => 158925253577
            [currentHomeId] => 158925253577
        )

等等。要将 $parent 作为 URL 字符串传递,您可以简单地使用 json_encode 对其进行字符串化:

$url = '?values='.json_encode($parent);

提供?values=[{"user":253404325847,"currentHomeId":253404325847},{"user":158925253577," 等...

这将被自动转义,您可以使用

在 javascript 客户端读取数组
var value = window.location.href.split('?values=')[1],
    array = JSON.parse(unescape(value));

console.log(array);

您现在将数组作为 JSON 对象客户端。有很多方法可以做到这一点。这只是一个快速的建议。

【讨论】:

  • 我怎样才能使用它们通过 URL 字符串中的参数传递它们?假设:example.com?player=FirstBitOfArray&home=SecondBitOfArray
  • 我添加了另一个 foreach($parent as $ids) 并计划在那里完成所有操作?
  • @ShivamPaw,不 - 就在一行中。你有数组,json_encode 将它“变回”为你可以传递的字符串......
  • @hanshenrik,是的,但在这种情况下不是必需的;该数组只包含数字和字母,花括号和方括号完全合法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多