Lidt indviklet, men du kan oprette JSON-objekter for hver række, sammenkæde dem ved hjælp af GROUP_CONCAT
og cast resultatet (indpakket i []
for at gøre det til et array) til JSON;
SELECT u.uid, u.username, CASE WHEN p.uid IS NULL THEN NULL ELSE CAST(CONCAT('[', GROUP_CONCAT(JSON_OBJECT('pid', p.pid, 'title', p .title, 'status', p.status)), ']') AS JSON) END portfoliosFROM user uLEFT JOIN portfolio p ON u.uid=p.uidWHERE p.status =1GROUP BY u.uid, u.username;
...hvilket giver...
+------+----------+------------------------ -------------------------------------------------- -------------------------------------------------- ------------+| 1 | manoj | [{"pid":1, "title":"title 1", "status":1}, {"pid":2, "title":"title 2", "status":1}, {"pid ":3, "title":"titel 3", "status":1}] || 2 | test | [{"pid":4, "title":"titel 1", "status":1}] || 3 | bruger | NULL || 4 | virksomhed | NULL |+------+------------------ -------------------------------------------------- -------------------------------------------------- --------+
Hvis du bruger en ældre MySQL uden JSON-understøttelse, kan du bygge den som en streng;
SELECT u.uid, u.username, CASE WHEN p.uid IS NULL THEN NULL ELSE CONCAT('[', GROUP_CONCAT(CONCAT('{ "pid":',p.pid,'," title":"', REPLACE(s.title, '"', '\\"'), '","status":',p.status, ' }')), ']') END portfoliosFROM user u VENSTRE JOIN portefølje p PÅ u.uid=p.uid OG p.status=1GRUPPER EFTER u.uid, u.username;
...som vil give dig...
+------+----------+------------------------ -------------------------------------------------- -------------------------------------------------- -+| uid | brugernavn | porteføljer |+------+-----------+------------------------------------- -------------------------------------------------- -------------------------------------------------------+| 1 | manoj | [{ "pid":2,"title":"titel 2","status":1 },{ "pid":3,"title":"titel 3","status":1 },{ "pid" ":1,"title":"titel 1","status":1 }] || 2 | test | [{ "pid":4,"title":"titel 1","status":1 }] || 3 | bruger | NULL || 4 | virksomhed | NULL |+------+------------------ -------------------------------------------------- -------------------------------------------------------+