sql >> Database teknologi >  >> RDS >> Mysql

MySQL group_concat med select inde i select

Jeg tror, ​​at dette er det, du leder efter, eller som kan få dig i gang:

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

For therapists.id = 1 dette burde give dig resultater:

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

Hvis du har brug for at sammenkæde day med locations kolonne, brug derefter en simpel 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

Output skal se sådan ud:

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

Hvis du har brug for at gruppere det hele i én række for hver terapeut, kan du GROUP_CONCAT() igen.

Rediger efter kommentarer :

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

Jeg har ikke testet koden, så der kan være nogle mindre fejl at justere. Ingen måde at teste det atm.




  1. LibreOffice:'com.mysql.jdbc.driver' kan ikke indlæses

  2. Sådan får du svarende til ResultSetMetaData uden ResultSet

  3. Sådan indsættes i MYSQL-rækken fra flere $_POST-arrays

  4. Rekursiv i cakephp3?