Kullanıcıdan gelecek olan alanların hangilerinin boş olduğunu anlayıp sql sorgusunun dışında tutmak istiyorum. Değer girilmemişse, o alan sorgunun içinde olmayacak. Örneğin kullanıcıdan gelecek olan alan1 alan2 adında iki alanımız olsun ve kullanıcı alan2 ye değer girmeden sorguyu çalıştırsın.

select * from tablo where alan1='alan1' and alan2='alan2';

bu şekilde çalışmayacaktır küçük bir if deyimi ile bu sorun halledilir ama alanlar projede çok fazla böyle olunca olasılıklar çok artıyor ve if deyimi yetersiz kalıyor. Öğrenmek istediğim, boş olan alanlar ile arama yapılmasın.

soruldu: 08 Haz '13, 04:38

orhangazi's gravatar image

orhangazi
132172126
cevap kabul oranı: 0%


PHP dilini bilmiyorum ama Java ile bu şekilde yapılabilir.

Map<String, String> liste = new HashMap<String, String>();

    liste.put("alan1", "dolu");
    liste.put("alan2", "dolu");
    liste.put("alan3", null);
    liste.put("alan4", "dolu");

    String SQL = "select * from tablo where ";
    Iterator iterator = liste.entrySet().iterator();

    while (iterator.hasNext()){

        Map.Entry<String, String> entry = (Entry<String, String>) iterator.next();
        if (entry.getValue() != null){
            SQL += entry.getKey() + "='" + entry.getValue() + "' and ";
        }

    }

    if (SQL.substring(SQL.length()-4, SQL.length()).trim().equals("and"))
        SQL = SQL.substring(0, SQL.length()-4);

    System.out.println(SQL);

Çıktı:

select * from tablo where alan1='dolu' and alan2='dolu' and alan4='dolu'
permanent link

cevaplandı: 08 Haz '13, 06:46

MDemir's gravatar image

MDemir
2.1k173445
cevap kabul oranı: 24%

değiştirildi: 08 Haz '13, 06:47

Teşekkürler uyarlamaya çalışacağım

(08 Haz '13, 06:51) orhangazi orhangazi's gravatar image

Teşekkürler kodlarınızı phpye göre uyarladım, Oğuz Çelikdemir'in de fikriyle birleştirdim gayet güzel çalışıyor. İlginizden dolayı teşekkür ederim.

(08 Haz '13, 16:26) orhangazi orhangazi's gravatar image

Ben teşekkür ederim. Soru cevaplandı olarak işaretlerseniz ve php kodlarını burada paylaşırsanız sizden sonra aynı problemi yaşayan biri için faydalı olacaktır.

(08 Haz '13, 16:53) MDemir MDemir's gravatar image

Anlatacak olursam iki dizi kullanarak halledebildim diyebilirim. 1.sinde girilen alanlar, ikincisinde veritabanındaki alanlar bulunuyor. bu değerleri sırasıyla ve aynı isimde dizilere koymamın sebebi yanlış alana yanlış değer girilmemesi için. kodu inceleyenler zaten anlayacaktır ne demek istediğimi:

(08 Haz '13, 19:30) orhangazi orhangazi's gravatar image
1

$alanlar = array($alan1,$alan2,$alan3,$alan4);//gelecek olan değerler $alanlar_adi = array('alan1','alan2','alan3','alan4'); //veritabanındaki alanlar

$sorgu_cumlesi = "select * from tabloadi where ";

for($i=0; $i<count($alanlar); $i++) { if($alanlar[$i] != "") { $sorgu_cumlesi .= $alanlar_adi[$i]."='".$alanlar[$i]."' and "; } }

$sorgu_cumlesi = substr($sorgu_cumlesi,0,-4);//en sona gelen bir adet boşluğu ve and kelimesini kesiyoruz $sorgu_cumlesi .= " order by id desc"; //.= stringleri birbirine bağlar $sorgu_cagri = mysqli_query($baglan, $sorgu_cumlesi);

(08 Haz '13, 19:30) orhangazi orhangazi's gravatar image

PHP'de dinamik parametre işlemleri için func_get_args isminde bir fonksiyon mevcuttur. Bunu kullanarak bir for döngüsü ile gelen tüm parametreleri yakalayabilirsin. Parametrenin ihtiva ettiği değeride sakladığı için, aynı for döngüsü içinde null olmayan alanları getirme diyebilirsin. Böylelikle, elinde null olmayan ve fonksiyona geçirilen parametreleri ihtiva eden bir dizi olmuş olur.

Ayrıca, kaç adet parametre geçirildi bu fonksiyona diye merak ediyorsan eğer yine func_num_args fonksiyonunu kullanabilirsin.

Ardından, Prepared Statements tabir edilen tekniği kullanarak dinamik olarak SQL sorgusuna bu alanları geçebilirsin.

permanent link

cevaplandı: 08 Haz '13, 11:31

O%C4%9Fuz%20%C3%87elikdemir's gravatar image

Oğuz Çelikdemir
2.0k52234
cevap kabul oranı: 13%

değiştirildi: 08 Haz '13, 11:35

Teşekkürler MDemir'in ve sizin yazdıklarınızı birleştirip ortaya bir şeyler çıkardım gayet güzel çalışıyor. İlginizden dolayı teşekkür ederim.

(08 Haz '13, 16:27) orhangazi orhangazi's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×168
×144

Soruldu: 08 Haz '13, 04:38

Görüntüleme: 1,005 kez

Son güncelleme: 08 Haz '13, 19:36

powered by BitNami OSQA