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