将多个查询结果行加载到数组中

时间:2014-05-16 01:30:48

标签: javascript php mysql arrays

我正在创建一个RPG。当用户登录时,我想从三个表中加载他们的数据:

  • quest_items 存储与商品相关的所有数据:

  • join_questitems 存储玩家ID与玩家所拥有物品之间的关联:

  • userstats 存储user_id,当前地图,当前任务,x y位置等

由于我想在运行时加载所有这些数据,我想我只是将两个查询放在同一个函数中,将结果存储在单独的数组中,然后将这两个数组推送到allData数组中。然后编码allData并将其传递给JS。

这里的问题是访问$.(each循环中的数据:


PHP:

$allData = array();
$itemsArray = array();
$statsArray = array();

$qry = 
    'SELECT qi.* 
    FROM quest_items qi
    LEFT JOIN join_questitems jqi ON (qi.item_id = jqi.item_id)
    WHERE jqi.user_id = "' . $playerID . '"';

$result = $mysqli->query($qry) or die(mysqli_error($mysqli));

while ($row = $result->fetch_assoc()) {
    $itemsArray[] = $row;
}   

$qry = 
    'SELECT us.* 
    FROM userstats us
    WHERE us.id_user_fk = "' . $playerID . '"';

$result = $mysqli->query($qry) or die(mysqli_error($mysqli));

while ($row = $result->fetch_assoc()) {
    $statsArray[] = $row;
}   

array_push($allData, $itemsArray, $statsArray);

echo json_encode($allData);

JavaScript代码段

我可以通过 quest_items 表中的$itemsArray访问$allData中的第一个数组(v[0].item_name),其中包含:{{1正如预期的那样。

但是,如果我尝试从 userstats 表访问第二个数组rice, test/path.png,则会提供v[1].username

undefined
  • $.getJSON("phpscripts.php", { "_player" : Player, "_playerID" : UserID }, function(returned_data) { $.each(returned_data, function (key, value) { $(".questItems").append("<br/>" + value[1].username + ", " + value[0].item_name); }); = undefined
  • value[1].username =工作

这很奇怪,因为chrome调试器响应显示正在容器数组中添加和返回两个数组:

enter image description here

这是为什么?为什么我无法使用value[0].item_name访问数组2?


编辑:

value[1].username

给予:

$.each(returned_data, function (key, value) {               
    console.log(value[1]);  
});

这是Object {item_id: "2", item_name: "meat", item_chinese: "rou", ... (index):29 undefined (index):29 的结果集。也许发生了什么

  • 由于value[0]的结果行数多于value[0],因此即使它传递了数组大小,它也可能会再次为value[1]循环。会打破它吗?

  • value[1]实际上是从第一个项目数组中访问第二个数组值...而不是指向 userstats 数组?


编辑2:

value[1]给出之后

console.log(returned_data)

function(returned_data)
[Array[2], Array[1]] 0: Array[2] 1: Array[1] length: 2 __proto__: Array[0] 给出后

console.log(value);

$.each(returned_data, function (key, value) {
[Object, Object] 0: Object 1: Object length: 2 __proto__: Array[0] [Object] 0: Object length: 1 __proto__: Array[0] 之后

console.log(returned_data);的扩展结果:

enter image description here


编辑3:如果我手动访问数组,它可以工作:function(returned_data)

returned_data[1][0]["username"]

但是如果我为item_name返回了很多数据行呢?我需要一个循环来获取所有数据。

1 个答案:

答案 0 :(得分:1)

第一次传递给$.each()的函数时,value0子容器,其01。第二次运行该函数时,value已经是1子容器。

如果returned_data[0]returned_data[1]不同,并且您希望对它们执行不同的操作,请不要使用$.each(),只需使用returned_data[0]和{{1 }}

所以:

returned_data[1]