2012-10-08 28 views
5

Muhtemelen beyni olmayan bir anım var.MySQL GROUP_CONCAT çoklu alanlar

Veritabanımdaki iki alandan GROUP_CONCAT kullanarak bir dizi numara döndürmek istiyorum. Bu iyi çalışır

SELECT t_id, 
CONCAT(GROUP_CONCAT(DISTINCT s_id),',',IFNULL(GROUP_CONCAT(DISTINCT i_id),'')) AS all_ids 
FROM mytable GROUP BY t_id 

ama i_id tabii o zaman NULL ise gereksiz bir virgül olsun: Şimdiye kadar aşağıdaki kullanarak yapmış. Bunu yapmak için daha iyi bir yol var mı, bu yüzden i_id NULL ise sonunda bir virgülle bitmeyeceğim?

cevap

13

Ekstra commaNULL değerlerini önlemek için CONCAT_WS kullanmak gerekir, bu deneyin:

tek tek (,) ile herhangi bir çift virgül (,,) değiştirin ama bu benim sorunum değil ederim
SELECT t_id, 
     CONCAT_WS(',', GROUP_CONCAT(DISTINCT s_id), 
       GROUP_CONCAT(DISTINCT i_id)) AS all_ids 
FROM mytable 
GROUP BY t_id; 
+0

. Eğer i_id null ise neye ihtiyacım olursa 2,6,8 gibi bir sonuç elde edersem, 2,6,8 –

+0

'CONCAT_WS' sizin için çalışmalıdır. – Omesh

+0

Teşekkürler. Bu harika çalışıyor. –