Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL group_concat dengan pilih di dalam pilih

Saya yakin inilah yang Anda cari, atau dapat membantu Anda memulai:

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

Untuk therapists.id = 1 ini akan memberi Anda hasil:

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

Jika Anda perlu menggabungkan day dengan locations kolom kemudian gunakan CONCAT() sederhana :

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

Outputnya akan terlihat seperti:

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

Jika Anda perlu mengelompokkan semuanya menjadi satu baris untuk setiap terapis, Anda dapat GROUP_CONCAT() lagi.

Edit setelah komentar :

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

Saya belum menguji kodenya jadi mungkin ada beberapa kesalahan kecil untuk diubah. Tidak ada cara untuk mengujinya di atm.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi Konversi MySQL

  2. Kolom CONCAT dengan Laravel 5 fasih

  3. Bagaimana cara mengambil catatan umum dalam tabel database yang sama melalui satu kueri SQL?

  4. Django + MySQL pada Mac OS 10.6.2 Snow Leopard

  5. menyiapkan database untuk melacak pengguna mana yang telah mengklik tautan mana?