我知道如何使用 PHP 将 SQL 查询中的所有数据编码为 JSON,但不知道如何对部分数据集进行编码。
在 Android(客户端)中,我发送了一个如下所示的 HTTP 请求:
public interface DataAPI {
@GET("/top500")
public void getResult(@Query("start") int start, @Query("count") int count,
Callback<Top500> response);
}
如您所见,我在 Android 代码中使用了 start 和 count。 我的表中有大约 500 条记录,我已使用以下 PHP 脚本将所有数据成功编码为 JSON:
<?php
$con = mysqli_connect(HOST,USER,PASS,DB);
$sql = "select * from Persons";
$res = mysqli_query($con,$sql);
$result = array();
while($row = mysqli_fetch_array($res)){
array_push($result,
array(
'id'=>$row[0],
'name'=>$row[1]
));
}
echo json_encode(array("result"=>$result));
mysqli_close($con);
?>
JSON 结果:
{"result": [{ ... }]}
但我需要像这样对 mysql 数据进行 20 x 20 编码:
{"count": 20, "start": 0, "total": 500, "result": [{ ...}]}
缺少的是如何使用 start 和 count 参数来获取部分集,以便获取数据切片。
最佳答案
您需要在查询中使用LIMIT
和OFFSET
。在 PHP 中应用一些讨厌的逻辑是一个糟糕的解决方案。这是 MySQL 应该执行的操作,因为如果不需要所有行,您不想获取所有行。
如果您运行这样的查询:
SELECT *
FROM Persons
ORDER BY Id
LIMIT 10 OFFSET 20
您将获得从第 20 行和长 10 行开始的匹配行的子集。然后,您可以遍历整个结果集。
最好按字段明确排序以确保不同页面之间的一致性。
你是最终代码(使用 PDO 而不是 mysqli):
$pdo = new PDO('mysql:dbname=db;host=127.0.0.1', $user, $password);
$count = $_GET['count'];
$start = $_GET['start'];
$stmt = $pdo->prepare('SELECT * FROM Persons ORDER BY Id LIMIT ? OFFSET ?');
$stmt->execute(array($count, $start));
$rows = $stmt->fetchAll();
foreach ($rows as $row) {
// your logic that was inside the while
}
关于PHP 将部分 MySQL 数据编码为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36082287/