問題:
尋求利用本機JSON 函數的MySQL 使用者可能會面臨從關聯式資料庫建立嵌套JSON 物件的挑戰。具體來說,嘗試從一對多關係建立子物件會觸發「子查詢傳回超過 1 行」錯誤。
解決方案:
有效產生嵌套使用 MySQL 的 JSON 對象,避免使用在父對象的輸入中返回多個結果的子查詢至關重要。相反,使用 GROUP_CONCAT 函數連接結果並將它們轉換為 JSON 陣列。
範例:
基於問題中提供的範例,以下查詢將產生所需的JSON 結構:
SELECT JSON_OBJECT( 'id', p.id, 'desc', p.`desc`, 'child_objects', ( SELECT CAST(CONCAT('[', GROUP_CONCAT(JSON_OBJECT('id', id, 'parent_id', parent_id, 'desc', `desc`)), ']') AS JSON) FROM child_table AS c WHERE c.parent_id = p.id ) ) FROM parent_table AS p;
此查詢利用CONCAT和GROUP_CONCAT 進行合併最終結果中所需的子物件。將連接的字串轉換為 JSON 資料類型可確保巢狀結構的正確格式。
結果:
渲染的 JSON物件將與中指定的格式緊密一致問題:
{ "id": 1, "desc": "parent row 1", "child_objects": [ { "id": 1, "parent_id": 1, "desc": "child row 1" }, { "id": 2, "parent_id": 1, "desc": "child row 2" } ] }
附加註意:
以上是在 MySQL 中產生巢狀 JSON 物件時如何避免「子查詢傳回超過 1 行」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!