Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL group_concat z zaznaczeniem wewnątrz wybierz

Wierzę, że tego właśnie szukasz lub możesz zacząć:

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

Dla therapists.id = 1 powinno to dać wyniki:

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

Jeśli potrzebujesz połączyć day z locations kolumnę, a następnie użyj prostej 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

Wynik powinien wyglądać tak:

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

Jeśli chcesz zgrupować to wszystko w jednym wierszu dla każdego terapeuty, możesz użyć GROUP_CONCAT() ponownie.

Edytuj po komentarzach :

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

Nie testowałem kodu, więc może być kilka drobnych błędów do poprawienia. Nie ma możliwości przetestowania tego w bankomacie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy naprawdę potrzebne są cudzysłowy wokół tabel i kolumn w zapytaniu MySQL?

  2. Szybka wskazówka MySQL:Używanie polecenia DROP USER

  3. Zapytanie Laravel, aby uzyskać wyniki zawierające co najmniej jeden element tablicy?

  4. Transakcja PHP PDO Duplikacja

  5. Funkcja pobierania jQuery-Ajax z klasami i funkcjami PHP