2015-06-17 59 views
0

我目前正在研究一个PHP脚本,它将用户数据编码为JSON,以及用户可能执行的相关操作/事件。例如,用户数据中的一些字段(在'USER'MySQL表中定义)包括用户的姓名,网站登录名以及他们完成某些操作的要点。在称为'MAYDO'的第二个表中,由用户执行的动作被存储(由ID引用),并且包括诸如用户做了什么(去星巴克,购买X,在日期Y和Z等)MySQL到JSON列出多行

我的问题是,我如何去引用我的'MAYDO'表中的每个元素,并将它与正确的用户,以JSON列表的形式? 我想有某种功能是这样的:

{ 
    'USER' { 
     'Name': 'John Doe', 
     'Occupation': 'Farmer', 
     'Age': 39 
     'User_id': 1 
    }, 
    'MAYDO' [{ 
      'User_Id': 1, 
      'Maydo_Id': 1, 
      'Event': 'Go to Farmer\'s Market', 
      'When': '2015-10-13 16:30:05' 
     }, 
     { 
      'User_Id': 1, 
      'Maydo_Id': 2, 
      'Event': 'Sell chickens at the auction', 
      'When': '2015-11-13 12:00:00' 
     }] 
} 

从本质上讲,我想在“MAYDO”表中的所有行与谁执行他们各自的用户相关联,并基本成为列表为用户JSON数据(每个人一个JSON文件)。我目前测试的代码只需要'MAYDO'表中的最后一个条目(如果发生多个事件),所以我想了解如何解决这个问题。任何帮助或提示,表示赞赏。谢谢!

当前代码(编码完美的用户数据;只有编码最后 'MAYDO' 条目)

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>USER DATA TO JSON</title> 
</head> 
<body> 

<?php 

# Define the connection to the database 
DEFINE('DB_SERVER', 'localhost'); 
DEFINE('DB_USER', 'root'); 
DEFINE('DB_PASSWORD', ''); 
DEFINE('DB_NAME', 'Maydo'); 

# Create a connection to the database 
$connection = @mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME); 
$index = 1; 
$query1 = "SELECT * FROM USER WHERE USER_ID = " . $index; 
$userinfo = array(); 
$username = ""; 

$result1 = mysqli_query($connection, $query1) or die("ERROR: " .  
mysqli_error($connection)); 

while($row = mysqli_fetch_assoc($result1)) { 
    $userinfo['User'] = $row; 
    $username = $row['USER_NAME']; 
} 

$query2 = "SELECT * FROM MAYDO WHERE USER_ID = " . $index; 

$result2 = mysqli_query($connection, $query2) or die("ERROR: " .  
mysqli_error($connection)); 
while($row = mysqli_fetch_assoc($result2)) { 
    $userinfo['Maydo'] = array($row); 
} 

echo json_encode($userinfo, JSON_NUMERIC_CHECK); 

?> 

</body> 
</html> 
+0

您必须将'$ userinfo ['Maydo']'中的每一行都推送到一个数组中。在这里,您将$ userinfo ['Maydo']'重新设置为最后一行,因此您只能获得最后一行。 –

+0

我试过这样做,但它根本不抓取MAYDO表中的信息。我试过这个:'array_push($ userinfo ['Maydo'],array($ row));' –

+0

'$ row'是一个数组:'array_push($ userinfo ['Maydo'],$ row);'你需要初始化:'$ userinfo = array('Maydo'=> array());' –

回答

0

尝试这样的事情,并请参阅本有用的链接 http://php.net/manual/en/function.array-push.php
http://php.net/manual/en/function.json-encode.php

<?php 

    # Define the connection to the database 
    DEFINE('DB_SERVER', 'localhost'); 
    DEFINE('DB_USER', 'root'); 
    DEFINE('DB_PASSWORD', ''); 
    DEFINE('DB_NAME', 'Maydo'); 

    # Create a connection to the database 
    $connection = @mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME); 
    $index = 1; 
    $query1 = "SELECT * FROM USER WHERE USER_ID = " . $index; 
    $query2 = "SELECT * FROM MAYDO WHERE USER_ID = " . $index; 

    $userinfo = array(); 
    $username = ""; 

    $result1 = mysqli_query($connection, $query1) or die("ERROR: " .  
    mysqli_error($connection)); 

    $result2 = mysqli_query($connection, $query2) or die("ERROR: " .  
    mysqli_error($connection)); 

    $mayDo = array(); 
    while($row = mysqli_fetch_assoc($result1)) { 

     while($row2 = mysqli_fetch_assoc($result2)) { 
      array_push($mayDo,$row2); 
     } 
     array_push($row,$mayDo); 
     array_push($userinfo,$row); 
    } 

    echo json_encode($userinfo, JSON_NUMERIC_CHECK); 

    ?> 
+0

有了这个解决方案,我没有以$ userinfo的形式得到任何输出。我不认为你用$ userinfo连接了$ mayDo - 你能告诉我怎么从这里做到这一点吗?谢谢! –

+0

将数组推入'$ userinfo'的想法是键 –

+0

谢谢,现在它变得更有意义。然而,对于MayDo数组,我得到了列出所有动作的数组,但存储动作列表的数组名称是0而不是'Maydo',可能是因为它存储了空数组。将这两个数组命名为User和Maydo? –