[英]converting MySQL One-to-Many result set to JSON
我有兩個與topic_id相關的表(講座和主題)。 我需要作為相關主題的孩子參加講座。 所需的json_encode($ result)應為:
[
{"id":"2","name":"topic 3",
"lectures": [
{"id":"9", "topic_id":"2","name":"lecture 1"},
{"id":"10","topic_id":"2","name":"lecture 2"},
{"id":"11","topic_id":"2","name":"lecture 3"}
]
},
{"id":"3","name":"topic 4",
"lectures": [
{"id":"12","topic_id":"3","name":"lecture 1"},
{"id":"13","topic_id":"3","name":"lecture 2"},
{"id":"14","topic_id":"3","name":"lecture 3"}
]
}
]
一種可能的解決方案是像這樣重新生成數組
$topics = $db->query("select * FROM topic")->fetchAll(PDO::FETCH_ASSOC);
$lectures = $db->query("SELECT * FROM lecture")->fetchAll(PDO::FETCH_ASSOC);
foreach($topics AS $topic) {
$result[$topic["id"]] = $topic;
$result[$topic["id"]]["lectures"] = array();
}
foreach($lectures AS $lecture) {
$result[$lecture["topic_id"]]["lectures"][] = $lecture;
}
echo json_encode($result);
結果是:
[
{"2": {"id":"2","name":"topic 3",
"lectures": [
{"id":"9", "topic_id":"2","name":"lecture 1"},
{"id":"10","topic_id":"2","name":"lecture 2"},
{"id":"11","topic_id":"2","name":"lecture 3"}
]
},
{"3": {"id":"3","name":"topic 4",
"lectures": [
// ...
]
這仍然不是我們所需要的。 我需要刪除最上面的ID(用作鍵),方法是在服務器或客戶端通過重新生成結果數組來完成,僅保留值。 (不太優雅)的解決方案可能是:
$result2 = array();
foreach($result AS $res) {
$result2[] = $res;
}
echo json_encode($result2);
這給了我想要的結果,但是解決方案遠非高效。
任何關於這樣做的更好方法的建議將不勝感激。 建議可能包括以下更有效的方法:
謝謝
您的問題有點模棱兩可,所以我在這里猜測。 我認為您只需要一個MySQL語句。
SELECT lecture.id lid,lecture.name lname,topic.id tid,topid.name tname
FROM lecture
LEFT JOIN topic ON lecture.id = topic.id
ORDER BY lid,tid
您的結果應該按照正確的順序排列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.