Den "nemme" metode er at bruge CONCAT til at generere JSON.
Og brug GROUP_CONCAT til at kombinere de flere teams poster til et JSON-array.
Denne metode virker også i de ældre MySQL-versioner, der ikke understøtter oprettelse af JSON-funktioner.
Forespørgsel
SET SESSION group_concat_max_len =@@max_allowed_packetSELECT CONCAT( "{" , '"id"' , ":" , '"' , friends.id , '"' , "," , '"navn"' , ":" , '"' , venner.navn , '"' , "," , '"hold"' , ":" , "[" , GROUP_CONCAT('"', hold.navn, '"') , "]" , "}" ) SOM jsonFRA venner INNER JOIN relationer PÅ friends.id =relations.friends_idINNER JOIN hold PÅ relations.teams_id =teams.idWHERE friends.id =1
Resultat
| json ||------------------------------------------------------ ------------------|| {"id":"1","name":"David Belton","team":["Cleveland Cavaliers"]} |
demo
http://www.sqlfiddle.com/#!9/4cd244/19
Redigerede flere venner
Forespørgsel
SET SESSION group_concat_max_len =@@max_allowed_packetSELECT CONCAT( "[" , GROUP_CONCAT(json_records.json) # kombiner json-poster til en streng , "]" ) AS jsonFROM ( SELECT CONCAT( "{" , '"id "' , ":" , '"' , friends.id , '"' , "," , '"navn"' , ":" , '"' , friends.name , '"' , "," , ' "team"' , ":" , "[" , GROUP_CONCAT('"', teams.name, '"') , "]" , "}") SOM json FRA venner INNER JOIN relationer PÅ friends.id =relationer. friends_id INNER JOIN teams PÅ relations.teams_id =teams.id WHERE friends.id IN(SELECT id FROM friends) #vælg de venner, du har brug for, eller bare venner.id IN(1, 2) GRUPPER AF friends.id) AS json_records
Resultat
| json ||------------------------------------------------------ -------------------------------------------------- --------------------------------------------------| | [{"id":"1","name":"David Belton","team":["Cleveland Cavaliers"]},{"id":"2","name":"Alex James"," team":["Boston Celtics","Cleveland Cavaliers"]}] |
demo
http://www.sqlfiddle.com/#!9/4cd244/61