Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL group_concat với select bên trong select

Tôi tin rằng đây là những gì bạn đang tìm kiếm hoặc có thể giúp bạn bắt đầu:

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

Dành cho therapists.id = 1 điều này sẽ cung cấp cho bạn kết quả:

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

Nếu bạn cần nối day với locations sau đó sử dụng CONCAT() đơn giản :

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

Đầu ra sẽ giống như sau:

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

Nếu bạn cần nhóm tất cả thành một hàng cho mỗi nhà trị liệu, thì bạn có thể GROUP_CONCAT() một lần nữa.

Chỉnh sửa sau nhận xét :

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

Tôi chưa kiểm tra mã nên có thể có một số lỗi nhỏ cần chỉnh sửa. Không có cách nào để kiểm tra nó 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. hàm mysql php với tham số tùy chọn

  2. Làm cách nào để thêm ràng buộc KIỂM TRA tùy chỉnh trên bảng MySQL?

  3. Thực hiện một đăng nhập duy nhất cho ba trang web trong PHP?

  4. Nhập dữ liệu từ Excel trong PHP

  5. Cảnh báo:mysql_num_rows () mong đợi tham số 1 là tài nguyên, mảng được cung cấp trong