2010-09-06 14 views
17

Data la seguente query MySQL:Come impedire a GROUP_CONCAT di creare un risultato quando non sono presenti dati di input?

SELECT 
    `show`.`id` 
    , GROUP_CONCAT(`showClips`.`clipId` ORDER BY `position` ASC) AS 'playlist' 
FROM 
    `show` 
    INNER JOIN 
    `showClips` 
     ON 
     (`show`.`id` = `showClips`.`showId`) 
; 

Voglio recuperare un elenco di tutti gli "spettacoli" dal database, compresi gli ID di "clip" contenute.

Questo funziona correttamente, purché nella tabella show siano presenti voci. Per questo problema, assumiamo che tutte le tabelle siano completamente vuote.

GROUP_CONCAT restituirà NULL e quindi forzando una riga nel risultato (che contiene solo i valori NULL).

La mia applicazione penserà quindi che uno spettacolo/risultato esiste. Ma quel risultato non sarà valido. Naturalmente questo può essere controllato, ma credo che questo potrebbe (e dovrebbe) essere prevenuto nella query già.

risposta

33

Si dovrà semplicemente aggiungere un GROUP BY alla fine.

Test case:

CREATE TABLE `show` (id int); 
CREATE TABLE `showClips` (clipId int, showId int, position int); 

SELECT 
    `show`.`id`, 
    GROUP_CONCAT(`showClips`.`clipId` ORDER BY `position` ASC) AS 'playlist' 
FROM `show` 
INNER JOIN `showClips` ON (`show`.`id` = `showClips`.`showId`) 
GROUP BY `show`.`id`; 

Empty set (0.00 sec) 
8

Aggiungi gruppo per show. id, quindi il risultato sarà corretto per le tabelle vuote:

creare tabella vuota (id int, nome varchar (20));

select id, group_concat(name) from emptyt 

risultato:

NULL, NULL 

query con gruppo da

select id, group_concat(name) from emptyt 
group by Id 

risultato:

vuoto dataset

+0

Grazie. Segnerò la risposta di Daniel come risposta, poiché sembrava essere stato un secondo più veloce. –

Problemi correlati