Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कई-से-अनेक संबंधों के 3 तालिकाओं से MySQL के साथ सरणियों में कैसे शामिल हों?

JSON उत्पन्न करने के लिए CONCAT का उपयोग करने के लिए "आसान" विधि है।
और कई टीमों के रिकॉर्ड को एक JSON सरणी में संयोजित करने के लिए GROUP_CONCAT का उपयोग करें।
यह मेथोड पुराने MySQL संस्करणों में भी काम करता है जो JSON फ़ंक्शन बनाने का समर्थन नहीं करते हैं।

क्वेरी

SET SESSION group_concat_max_len = @@max_allowed_packet

SELECT 
 CONCAT(
     "{"
   ,     '"id"' , ":" , '"' , friends.id , '"' , ","
   ,     '"name"' , ":" , '"' , friends.name , '"' , ","
   ,     '"team"' , ":" , "["
                              , GROUP_CONCAT('"', teams.name, '"')
                        , "]"
   , "}"
   ) AS json
FROM 
 friends 
INNER JOIN 
 relations 
ON 
 friends.id = relations.friends_id
INNER JOIN
 teams 
ON
 relations.teams_id = teams.id
WHERE 
 friends.id = 1

परिणाम

|                                                            json |
|-----------------------------------------------------------------|
| {"id":"1","name":"David Belton","team":["Cleveland Cavaliers"]} |

डेमो

http://www.sqlfiddle.com/#!9/4cd244/19

अधिक मित्रों को संपादित किया

क्वेरी

SET SESSION group_concat_max_len = @@max_allowed_packet

SELECT
  CONCAT(
      "["
    , GROUP_CONCAT(json_records.json) # combine json records into a string
    , "]"
  )  AS json
FROM (

  SELECT 
     CONCAT(
       "{"
     ,     '"id"' , ":" , '"' , friends.id , '"' , ","
     ,     '"name"' , ":" , '"' , friends.name , '"' , ","
     ,     '"team"' , ":" , "["
                              , GROUP_CONCAT('"', teams.name, '"')
                          , "]"
     , "}"
     ) AS json 
  FROM 
    friends 
  INNER JOIN 
    relations 
  ON 
    friends.id = relations.friends_id
  INNER JOIN
    teams 
  ON
    relations.teams_id = teams.id
  WHERE 
    friends.id IN(SELECT id FROM friends) #select the friends you need or just simply friends.id IN(1, 2)
  GROUP BY
     friends.id
) 
 AS json_records

परिणाम

|                                                                                                                                             json |
|--------------------------------------------------------------------------------------------------------------------------------------------------|
| [{"id":"1","name":"David Belton","team":["Cleveland Cavaliers"]},{"id":"2","name":"Alex James","team":["Boston Celtics","Cleveland Cavaliers"]}] |

डेमो

http://www.sqlfiddle.com/#!9/4cd244/61




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल इंसर्ट रो और कॉपी इंसर्ट की गई ऑटो-इंक्रीमेंट आईडी को दूसरे कॉलम में कॉपी करें

  2. मैं utf8mb4 का उपयोग करके MySQL में इमोजी द्वारा कैसे खोज सकता हूं?

  3. अलगाव स्तर READ_UNCOMMITTED होने पर चल रहे लेनदेन द्वारा डाली गई पंक्तियों को नहीं देख सकता

  4. तालिका 'केवल पढ़ने के लिए' है

  5. MySQL 5.7 में विदेशी कुंजी जोड़ने में असमर्थ (संदर्भित तालिका में अनुपलब्ध बाधा)