Orhan Gazi Kılıç

"Allah'ım sen beni, milletime ve devletime faydam dokunmadan alma"

Kendiliğinden Oluşan Select Sorgusu

Yazar: Orhan Gazi KILIÇ — 21 Haziran 2013 Cuma — Saat: 00:01:00

Üzerinde çalıştığım projem için bir arama sorgusu yapmam gerekiyordu ama öyle basitinden bir sql sorgusu değil. Daha doğrusu basit, ama zor. Biraz karmaşık oldu bilinçli olarak yazıyı biraz uzatacağım. Demek istediğim dinamik bir sorgu olacak bu. Bildiğimiz sql arama sorgusu şu şekilde:
[PHP-MySQL]
select * from tablo_adi where adi='$gelen_veri1';
Peki arama için gelen veri 2 tane olsaydı? o da şöyle:
[PHP-MySQL]
select * from tablo_adi where adi='$gelen_veri1' and soyadi='$';
Peki bu gelen verilerin hangisinin boş, hangisinin dolu olacağını bilmeseydik ve bu verilerden 10 veya 20 veya çok daha fazla olsaydı ne yapardık. İki tane olsa kodu biraz uzatıp if-else deyimiyle hallederdik ama sayı çoğaldıkça olasılıklar da artıyor. Örneğin veri1 gelebilir, veri2 gelebilir veri3 gelmeyebilir, veri4 gelebilir veri5 gelmeyebilir? Bunları if-else deyimiyle yapmak mümkün olsa da kolay kolay kimse gözüne kestiremez öyle değil mi? O zaman biraz kodla elimizdeki gelen verilerin hangisinin boş hangisinin dolu olduğunu anlayıp, sorgu kendiliğinden oluşacak şekilde sorgu cümlesiyle oynayacağız.
[PHP-MySQL]
$gelen_veri1=$_POST['gelen_veri1'];//elimizde kullanıcıdan gelmesi beklenen 10 tane verimiz olsun.
$gelen_veri2=$_POST['gelen_veri2'];
$gelen_veri3=$_POST['gelen_veri3'];
$gelen_veri4=$_POST['gelen_veri4'];
$gelen_veri5=$_POST['gelen_veri5'];
$gelen_veri6=$_POST['gelen_veri6'];
$gelen_veri7=$_POST['gelen_veri7'];
$gelen_veri8=$_POST['gelen_veri8'];
$gelen_veri9=$_POST['gelen_veri9'];
$gelen_veri10=$_POST['gelen_veri10'];

$sorgu_cumlesi = "select * from tablo_adi where "; //tamamlayacağımız sorgu cümlesi

//Birazdan iki tane dizi kullanacağız ki bu dizlerden birisi veri tabanında
//hangi alana yazdıracağımızı belirtsin, diğeri gelen veri olsun.
$gelen_veriler_dizi = [$gelen_veri1,$gelen_veri2,$gelen_veri3,
    $gelen_veri4,$gelen_veri5,$gelen_veri6,$gelen_veri7,
    $gelen_veri8,$gelen_veri9,$gelen_veri10]; //beklenen verileri bir diziye attık

$tablodaki_alanlar = ['alan1','alan2','alan3','alan4','alan5','alan6',
    'alan7','alan8','alan9','alan10']; //aynı şekilde, beklenen verilerin sırasına göre dikkat ederek veri tabanındaki tablomuzdaki alanların isimlerini string olarak diziye attık. sıralamanın aynı olmasına özellikle dikkat edin ki yanlış veri yanlış alana kaydolmasın.

for($i=0; $i<10; $i++) //count ile $tablodaki_alanlar dizisinin eleman sayısı kadar döngüye girecek yani tamamını kontrol edecek
{
    if($gelen_veriler_dizi[$i] != "") //İşte şimdi amacımıza ulaşıyoruz :) eğer gelen_veriler_dizisi'nin $i nci elemanı boş değil ise $sorgu_cumlesi'ni ekleme yapmış olacağız.
    {
        $sorgu_cumlesi .= $tablodaki_alanlar[$i]."='".$gelen_veriler_dizi[$i]."' and ";
        // .= operatörü stringleri birleştirmeye yarar. Yani 
        //$onceki_string = 'orhan ' ise ve biz onu $onceki_string .= "gazi kılıç";
        //işlemi ile sağdaki başka bir stringle birleştirmişsek $onceki_string'in
        //değeri orhan gazi kılıç olacaktır. bunu ben bu projede öğrendim ve çok da hoşuma gitti :)
    }
}

$sorgu_cumlesi = substr($sorgu_cumlesi,0,-5); //ile sorgu cümlemizdeki en son eklenen " and " kelimesini her iki tarafındaki boşluklarla birlikte (yani -5 karakter) siliyoruz yoksa bildiğiniz gibi syntax hatası olur. Sonu and ile biten sorgu gördünüz mü hiç :)

$sorgu_cumlesi .= " order by id"; // son olarak da gerekiyorsa sorgu cümlemize bir sıralama koşulu ekleyip sorgu cümlemizin çıktısını kontrol etmek amacıyla yazdıralım:
echo $sorgu_cumlesi; exit;
Kontrol edip, herhangi bir sorun yoksa artık yolumuza devam edebiliriz. Bunu buraya yazdım çünkü en azından ben internette böyle bir kaynak bulamadım ve ihtiyacı olanlarımızın işini kolaylaştırmak istedim. Bitirme cümlelerim pek iyi değildir :)


#orhangazikılıç #yazılımcı #programcı #mühendis #oyuncu #vatanperver