MySQL’de GROUP_CONCAT kullanımı

Aldığım web yazılım projelerinde çok büyük çoğunlukla MySQL veritabanını kullanıyorum. Ve bazen çalışırken o kadar otomatikleşiyorsunuz ki; bildikleriniz ile çizilen çemberin dışı var mı, ne merak etmek aklınıza geliyor, ne de zaman ayırabiliyorsunuz.

İşte bu tip gözden kaçan ve malesef yakın zamanda farkettiğim bir bilgiyi paylaşacağım. MySQL’de aşağıdaki gibi tablolarımız var elimizde ve bölüm isimleri ile karşılığında bölüm çalışanlarının listelendiği birer sütun halinde veriler elde etmek istiyoruz (kitaplarda hep böyle örnekler verilir ya 😛 ).

Normalde GROUP komutu ile bölüm çalışanlarının sayısını alabiliriz. Yada ikinci bir SQL ile her bir bölümdeki çalışanları ayrı ayrı çekebiliriz. Ama burada yapacağımız şey; tek sorgu kullanarak bölüm isimlerini ve o bölümde çalışan kişilerin isimlerinden oluşan bir diziyi elde etmek olacak.

bolumler

id isim
1 Muhasebe
2 Pazarlama
3 Reklam

calisanlar

id bolum isim
1 1 Murat
2 3 Nihal
3 2 Kemal
4 1 Ali
5 3 Neşe

Şimdi SQL ‘imizi yazalım 🙂

SELECT bolum.isim, GROUP_CONCAT(calisanlar.isim ORDER BY isim SEPARATOR ', ') AS calisanlar
FROM bolum
LEFT JOIN calisanlar ON bolum.id=calisanlar.bolum
GROUP BY bolum.id
ORDER BY bolum .isim

İşte bunu kullanarak aşağıdaki sonucu elde edebilirsiniz:

isim calisanlar
Muhasebe Murat,Ali
Pazarlama Kemal
Reklam Nihal,Neşe

Tırnak içindeki karakteri istediğiniz herhangi bir karakter kullanabilirsiniz. Çalışanları isimlerine göre alfabetik sıraya dizilmiş ve virgüllerle ayrılmış halde elde edebiliyoruz.

Kaynaklar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir