如何从多个表中选择数据并以json格式显示它们?

时间:2014-12-06 00:08:40

标签: php mysql

我有很多相同的表格。我需要从每个表中获取数据并以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代码怎么样?

2 个答案:

答案 0 :(得分:0)

检查以下查询,它给你的想法,这只是一个单独的表,它的工作原理。你可以使用union来获得所有表的摘要......

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

答案 1 :(得分:-2)

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

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

<?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 ;

但如果你可以多次访问数据库,我会高度建议只运行php中的每个选择,将每个结果转换为json,将每个结果弹出数组,然后迭代创建一个大json