sql >> Database teknologi >  >> RDS >> Mysql

Sådan forbinder du arrays med MySQL fra 3 tabeller med mange-til-mange-forhold

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




  1. PDO sender rå forespørgsel til MySQL, mens Mysqli sender forberedt forespørgsel, begge giver det samme resultat

  2. Behov for kun at hente registreringer fra MySQL-databasen efter dato fra et datetime-felt

  3. hvordan indsætter jeg flere værdier i mysql og undgår dubletter

  4. Hvilken version af MySQL er kompatibel med Airflow version 1.10?