簡體   English   中英

將MySQL一對多結果集轉換為JSON

[英]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查詢來完成一些工作。
  • PHP中的數組操作
  • 通過在客戶端上進行操作來獲得所需的結果(JavaScript,jQuery或Underscore便捷方法)

謝謝

您的問題有點模棱兩可,所以我在這里猜測。 我認為您只需要一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM