Merhabalar bugün sizlere Mysql ile find_in_set kontrol kullanarak içinde varmı aradığınız anahtarın varmı kontrolünü yapan fonksiyondan bahsetmek istiyorum. Bu fonksiyon Php’den ve javascript’te çok sıkça kullanmakta olduğumuzu ( inArray & in_array ) benzemektedir. MySQL üzerinde nasıl kullanabiliriz kısa bir şekilde örnekleyecek olursak;
SELECT FIND_IN_SET(‘b’,’a,b,c’)
bu sorgunun çıktısı size 2 vericektir ve bunun anlamı belirttiğiniz değer 2 sırada demektir. Fakat siz bu ayırımları virgül “,” ile yapmadıysanız ve benim gibi pipe “|” işareti kulandıysanız yapmanız gereken ise burada bu sorguya birde replace komutunu eklemek olacaktır. Buradaki amacımız ise bizim belirttiğimiz ayıraç “delimiter” ile find_in_set kullanımında gereken “,” işaretine çevirme işlemini yaptık.
MySQL ile find_in_set kontrol yeni sorgumuzun son hali ise
SELECT * FROM table WHERE FIND_IN_SET (‘aranan’ , REPLACE(data,’|’,’,’)) > 0
olacaktır. Sizde yukarıdaki sorguyu kendinize göre derleyerek kullanabilirsiniz.
Konuyu Özetleyerek Toparlayalım
MySQL veritabanında, FIND_IN_SET
fonksiyonu, bir dizi içinde verilen değerin indeksini döndürür. Bu fonksiyon, verilen değerin dizide bulunup bulunmadığını kontrol etmek için kullanılır. FIND_IN_SET
fonksiyonu, aşağıdaki gibi kullanılır:
SELECT * FROM tablo_adi WHERE FIND_IN_SET(deger, dizi_alan);
Bu sorgu, tablo_adi
tablosundaki dizi_alan
alanı içinde deger
değerini arar ve bulursa, bu kaydın diğer alanlarını da döndürür. FIND_IN_SET
fonksiyonu, dizi alanlarında kullanılır ve dizi alanları, virgülle ayrılmış değerlerden oluşan metin alanlarıdır.
Örneğin, aşağıdaki veritabanı tablosu bir öğrenci tablosu olabilir ve öğrenci_id
, öğrenci_adi
ve dersler
alanları vardır:
öğrenci_id | öğrenci_adi | dersler
--------------------------------------
1 | Ahmet | Matematik, Fizik, Kimya
2 | Mehmet | Matematik, Tarih, Coğrafya
3 | Ali | Fizik, Kimya, Coğrafya
4 | Ayşe | Matematik, Tarih
Şimdi, dersler
alanı içinde “Matematik” değerini aramak istediğimizi varsayalım. Bu durumda, aşağıdaki sorguyu kullanabiliriz:
SELECT * FROM öğrenciler WHERE FIND_IN_SET('Matematik', dersler);
Bu sorgu, “Matematik” değerini içeren kayıtları döndürecektir:
öğrenci_id | öğrenci_adi | dersler
--------------------------------------
1 | Ahmet | Matematik, Fizik, Kimya
2 | Mehmet | Matematik, Tarih, Coğrafya
4 | Ayşe | Matematik, Tarih
Herhangi bir sorunuz olması halinde yorum olarak yazabilirsiniz.