2014-12-06 101 views
-2

我有许多相同的表格。我需要从每个表中获取数据并将它们以json格式导出:如何从多个表中选择数据并以json格式显示它们?

[ 
    "table1": { 
    ["first colomn value", "second colomn value", ...], 
    ["first colomn value", "second colomn value", ...], 
    ["first colomn value", "second colomn value", ...], 
    ... 
    }, 
    "table2": { 
    //values from table2 
    }, 
    ... 
] 

是否可以创建一个请求mysql?请求和php代码如何呢?

+1

将数据提取到数组中,然后用'json_encode()'将其全部转储。你在哪里陷入困境? – Havenard 2014-12-06 00:11:57

+0

Stackoverflow不是代码编写服务。请尝试自己解决这个问题,如果您遇到困难,请回复一个关于什么不工作的*特定*问题,我们很乐意提供帮助。 – Madbreaks 2014-12-06 00:12:12

+0

@Madbreaks,我不明白如何使MySQL请求。我希望我自己写php代码。 – dkhlus 2014-12-06 00:14:07

回答

-2

要在一个请求中执行此操作,您需要一个存储过程,然后遍历结果集并遍历结果。为了便于携带,您最好不要使用存储过程,因为它们不够便携。

继承人一些代码,我从http://php.net/manual/en/pdostatement.nextrowset.php修改使用PDO

<?php 
// dont forget to instantiate $conn 
$sql = 'CALL multiple_rowsets()'; 
$stmt = $conn->query($sql); 
$jsonArr = array(); 
do { 
    $rowset = $stmt->fetchAll(PDO::FETCH_NUM); 
    if ($rowset) { 
     $jsonArr[] = tojson($rowset, $i); 
    } 
} while ($stmt->nextRowset()); 

$jsonData = "{"; 
$i = 0; 

foreaeach ($jsonArr as $json) 
{ 
    if($i !== 0) $json .=','; 
    else $i = 1; 
    $jsonData .= $json; 
}  

$jsonData .= "}"; 

echo $jsonData; // your output 

function tojson(&$rowset) { 
    $json = '{'; 
    $p = 0; 
    foreach ($rowset as $row) { 
     if($p !== 0) $json .=','; 
      else $p = 1; 
     $json .= '['; 
     $i = 0; 
     foreach ($row as $col) { 
      if($i !== 0) $json .=','; 
      else $i = 1; 
      $json .= $col 
     } 
     $json = "]"; 
    } 
    $json.="}"; 
    return $json; 
} 
?> 

这是未经测试,但应该给你的怎么办呢

现在您的存储过程中的想法应该看起来像

DELIMITER // 
CREATE PROCEDURE multiple_rowsets() 
    BEGIN 
    SELECT * FROM table1; 
    SELECT * FROM table2; 
    SELECT * FROM table3; 
    END // 
DELIMITER ; 

但是,如果你可以不止一次去数据库,我会高度推荐只是ru nning从php中选择每个结果,将每个结果转换为json,将每个结果排列在数组中,然后遍历创建一个大json

+0

表名不提前知道。 – dkhlus 2014-12-06 00:51:24

+0

比你不可能在一次交易中做到这一点。你可以让你的数组表$'table',遍历每个表,将结果存储在一个数组中,并像@ Havenard所说的那样在数组上调用'json_encode()'。连接到数据库使用http://php.net/manual/en/book.pdo.php和http://php.net/manual/en/pdo.connections.php – user1290942 2014-12-06 01:05:10

0

检查以下查询,它给出了这个想法,这只是针对单个表而它作品。你可以使用union来获得所有表的汇总...

select concat("{", (select group_concat(concat('["', concat_ws('","', col1_name, col2_name, col3_name), '"]')) from your_table) ,"}") from dual; 
相关问题