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