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

MySQL group_concat अंदर सेलेक्ट के साथ चुनें

मेरा मानना ​​है कि यही वह है जिसे आप ढूंढ रहे हैं, या आपको शुरू कर सकते हैं:

SELECT
    t.therapist_name,
    dl.day,
    GROUP_CONCAT(DISTINCT dl.name SEPARATOR ',') AS locations
FROM
    therapists t 
    LEFT JOIN days_location dl ON dl.therapist_id = t.id
    LEFT JOIN location l ON dl.location_id = l.id
GROUP BY t.therapist_name, dl.day

therapists.id = 1 . के लिए यह आपको परिणाम देगा:

+----------------+-----------+-----------------------+
| therapist_name |    day    |       locations       |
+----------------+-----------+-----------------------+
| Therapist 1    | monday    | Location 1,Location 2 |
| Therapist 1    | wednesday | Location 3            |
| Therapist 1    | friday    | Location 1            |
+----------------+-----------+-----------------------+

यदि आपको day को संयोजित करने की आवश्यकता है locations . के साथ कॉलम के बाद एक साधारण CONCAT() का उपयोग करें :

SELECT
    therapist_name,
    CONCAT(day, '(', locations, ')') AS locations
FROM (  
    SELECT
        t.therapist_name,
        dl.day,
        GROUP_CONCAT(DISTINCT dl.name SEPARATOR ',') AS locations
    FROM
        therapists t 
        LEFT JOIN days_location dl ON dl.therapist_id = t.id
        LEFT JOIN location l ON dl.location_id = l.id
    GROUP BY t.therapist_name, dl.day
    ) t
GROUP BY therapist_name, locations

आउटपुट इस तरह दिखना चाहिए:

+----------------+-------------------------------+
| therapist_name |           locations           |
+----------------+-------------------------------+
| Therapist 1    | monday(Location 1,Location 2) |
| Therapist 1    | wednesday(Location 3)         |
| Therapist 1    | friday(Location 1)            |
+----------------+-------------------------------+

यदि आपको प्रत्येक चिकित्सक के लिए इसे एक पंक्ति में समूहित करने की आवश्यकता है, तो आप GROUP_CONCAT() कर सकते हैं फिर से।

टिप्पणियों के बाद संपादित करें :

SELECT
    therapist_name,
    GROUP_CONCAT( CONCAT(day, '(', locations, ')') SEPARATOR ',' ) AS locations
FROM (      
    SELECT
            t.therapist_name,
            dl.day,
            GROUP_CONCAT(DISTINCT dl.name SEPARATOR ',') AS locations
    FROM
            therapists t 
            LEFT JOIN days_location dl ON dl.therapist_id = t.id
            LEFT JOIN location l ON dl.location_id = l.id
    GROUP BY t.therapist_name, dl.day
    ) t
GROUP BY therapist_name

मैंने कोड का परीक्षण नहीं किया है, इसलिए ट्वीक करने के लिए कुछ छोटी गलतियां हो सकती हैं। एटीएम के परीक्षण का कोई तरीका नहीं है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql प्राथमिक के लिए अद्वितीय कुंजी बदल रहा है (mariadb)

  2. IPv6 को डेटाबेस में स्टोर करें

  3. PHP में MySQL परिणामों के माध्यम से पुनरावृति करते हुए भविष्य के डुप्लिकेट मानों का पता लगाएं

  4. 'शब्दकोश' के बजाय एक सरणी बनाने के लिए JSON को संपादित करने में सहायता करें

  5. JSON_STORAGE_FREE () - पता करें कि MySQL में JSON दस्तावेज़ के अपडेट के बाद कितना संग्रहण स्थान खाली हो गया था