我使用 mysqli 查询作为 JSON 输出。
这是我的查询:
$sql = "SELECT p.*,comments.*,COUNT(comments.id) AS numComments FROM people AS p
LEFT JOIN comments ON comments.people_id = p.id
WHERE p.name LIKE '%".$data."%'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$myArray[] = $row;
}
echo json_encode($myArray);
} else {
echo 0;
}
我想要做的是将所有人员评论分组并将其放置在人员数据下。例如:
期望的输出是我将能够不直接从查询访问评论,而是从人本身访问评论。
例如:
echo $person['comment'][0]['content']
目前,我像访问任何查询数据一样访问它..
echo $person['content']
JSON 输出:
如您所见,人物数据和评论数据混合在同一个数组中。我希望评论有自己的数组。
有什么想法吗?
编辑: 看来我的查询有问题。它只返回第一条评论!
最佳答案
您需要所谓的“预先加载”来完成此任务。它将涉及两个查询,但比一个要好得多。
您必须首先选择您的人员,然后获取人员 ID 并查询评论表以获取评论。最后你必须将两个数组组合在一起。
我将使用 PDO,因为它需要编写的代码减少 5 倍,thanks to some neat PDO features .
$stmt = $conn->prepare("SELECT * FROM people WHERE name LIKE ?");
$stmt->execute(["%$data%"]);
$people = $stmt->fetchAll(PDO::FETCH_UNIQUE);
$ids = array_keys($people);
$in = str_repeat('?,', count($ids) - 1) . '?';
$stmt = $db->prepare("SELECT people_id, * FROM comments WHERE people_id IN ($in)");
$stmt->execute($ids);
$comments = $stmt->fetchAll(PDO::FETCH_GROUP);
foreach($people as $id=>$row)
{
$row['comments'] = $comments[$id];
$people[$id] = $row;
}
关于php - Mysql 将连接表作为子数组返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37794790/