• 11-04-2014, 19:05:41
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba,

    Aşağıda tıpkısını göreceğiniz hafif yılan hikayesi bir sorgum var. Şükür ki tıkır tıkır çalışıyor ama ben buna birde yazıyla arama ekleme istiyorum. Ama sorun şu ki aramayı bir sütunda değil de 3-4 sütunda yapması gerekiyor.

    $query = mysql_query("SELECT *
    			FROM Urunler 
    			WHERE Barkod LIKE '$Tedarikci' AND Barkod Like '$Sezon' AND Barkod Like '$Uretim' AND Kategori_2 Like '$Kategori' AND (Stok BETWEEN '$Stok[0]' AND '$Stok[1]' AND Urun_Adi LIKE '%$Anahtar%') 
    			ORDER BY ID $Eklenme LIMIT $basla,$limit");
    Sorum şu Anahtar değişkeniyle gelen veriyi şu an sadece tek sütunda arıyor. Ben başka bir kolonda daha arama yapmasını istiyorum bu da sorgu içine bir sorgu daha demek. Bu performans açısından çok sorun çıkartır mı? ya da çıkartmaması için ne tavsiye edersiniz?

    Ayrıca Urun_Adi LIKE '%$Anahtar% OR Renk LIKE '%Anahtar%'

    şeklindeyken de sorgun çalışmıyor bunu nasıl çözeriz?
  • 11-04-2014, 22:07:24
    #2
    Urun_Adi LIKE '%". $Anahtar ."%' OR Renk LIKE '%". $Anahtar ."%'
  • 12-04-2014, 10:03:55
    #3
    sorgu hata vermeden çalıştı çalışmasına da bu kez de şöyle bir durum var

    mesela mavi yazıyorum sonuç olarak Urun_Adi sütununda mavi olanları getiriyor ama Renk sütununda mavi olanları getirmiyor. acaba burada ve/veya gibi bir terim var mı? ya da ne yapmak lazım?
  • 12-04-2014, 10:26:47
    #4
    diğer kriterlerinizide göz önünde bulundurun.

    WHERE Barkod LIKE '$Tedarikci' AND Barkod Like '$Sezon' AND Barkod Like '$Uretim' AND Kategori_2 Like '$Kategori' AND (Stok BETWEEN '$Stok[0]' AND '$Stok[1]' AND Urun_Adi LIKE '%$Anahtar%')

    Hepsinde AND kullanmışsınız sadece $Anahtar da OR kullanmışsınız. Belki renk olarak mavi dir ama diğer kriterleri zorunlu tuttuğunuz için "AND" ile orada uyuşmazlık olabilir.
  • 12-04-2014, 11:17:56
    #5
    ulast adlı üyeden alıntı: mesajı görüntüle
    diğer kriterlerinizide göz önünde bulundurun.

    WHERE Barkod LIKE '$Tedarikci' AND Barkod Like '$Sezon' AND Barkod Like '$Uretim' AND Kategori_2 Like '$Kategori' AND (Stok BETWEEN '$Stok[0]' AND '$Stok[1]' AND Urun_Adi LIKE '%$Anahtar%')

    Hepsinde AND kullanmışsınız sadece $Anahtar da OR kullanmışsınız. Belki renk olarak mavi dir ama diğer kriterleri zorunlu tuttuğunuz için "AND" ile orada uyuşmazlık olabilir.
    Hocam dediğinin doğruluğunu phpmyadmin ile test ettim.

    ilk önce or renk $anahtar bölümünü sildim ve Urun_Adi Like '%$Anahtar%' şeklinde çalıştırdım. mavi yi arattım 94 sonuç buldu. aynı kriterlerle phpmyadminde arama yaptırdım sonuç 94

    sonra Urun_Adi bölümünü çıkarttım ve Renk Like '%$Anahtar%' şeklinde çalıştırdım 67 sonuç buldu. aynı şekilde phpmyadmin de 67 sonuç getirdi.

    buradan yola çıkarak yazdığım kodun (kriterlerin) doğruluğunu onayladım.

    benim burada yapmak istediğim 94 + 67 sonucu bir anda vermesi. çok mu karışık çıkamadım işin içinden
  • 12-04-2014, 11:38:39
    #6
    iyide 94 sonuç belki 67 sonucu kapsıyor? yani 94 sonuç içinde "Mavi Gemi" kelimesi geçenlerin 67 tanesinde renk "Mavi" olabilir bu yüzden çıkarmıyor olabilir. Sonuçta aramanız 2 kriterden herhangi birinde olanı demiş yani

    "Ürün Adı" | "Renk"
    "Mavi Gemi" | "Mavi"
    "Mavi Tren" | "Kırmızı"

    Ürün adına göre ararsanız "Mavi" yi 2 Sonuç renge göre ararsanız 1 sonuç verecektir.

    sizin buradan 3 sonuç almanızın imkanı yok mesela
  • 12-04-2014, 11:57:30
    #7
    eğer tablonuzda veri depolama motoru myisam ise fulltext index özelliğini araştırmanızı öneririm. like kullanımına göre daha hızlı çalışacaktır.


    WHERE MATCH(field1,field2,field3) AGAINST('anaranacakkelimeler' IN BOOLEAN MODE) AND vs....
    Aynı anda 2 veya daha fazla kelime arama: mavi+kırmızı //+ ile
    Filitreleme: mavi+kırmızı - yeşil //mavi ve kırmızı sonuçlarını alır yeşilleri almaz
    başlayan ile arama : turu* //sonuç turuncu

    Araştırırsanız daha fazla sonuç alırsınız.
  • 12-04-2014, 12:05:15
    #8
    Biraz araştırınca istediğimi buldum.

    $query = mysql_query("SELECT *
    			FROM Urunler 
    			WHERE Barkod LIKE '$Tedarikci' AND Barkod Like '$Sezon' AND Barkod Like '$Uretim' AND Kategori_2 Like '$Kategori' AND (Stok BETWEEN '$Stok[0]' AND '$Stok[1]') AND MATCH (Urun_Adi, Renk) AGAINST('$Anahtar')
    			ORDER BY ID $Eklenme LIMIT $basla,$limit");
    sorguma MATCH () AGAINST ekledim

    ALTER TABLE Urunler ADD FULLTEXT(Urun_Adi,Renk);
    şeklinde index oluşturdum. benim istediğim tüm sonuçları doğru sayıda getirdi.
  • 12-04-2014, 14:27:19
    #9
    Şimdi bir sorun daha çıktı,

    sorgudan $Anahtar bölümünü çıkarttığımda (fulltext mevzusu) dropdown larla işi tamamladığımda sonuçlar geliyor (mesela $Tedarikci den 1 diye bir veri geldimi sadece 1in sonuçlarını gösteriyor.)

    işin içine $Arama bölümünü dahil ettiğimi ve $Tedarikci yine 1 olduğunu düşünelim.

    eğer yazı alanından birşey geliyorsa (herhangi bir arama kelimesi yazdığımda misal mavi) 1 tedarikçisinin içinde mavi lafı geçenlerini getiriyor ki harikabirşey

    eğer yazı alanına birşey yazmadıysam sıfır sonuç geliyor halbuki 1 tedarikçisinin herşeyini getirmesi lazım. yani eğer yazı ile gelen birşey yoksa MATCH AGAINST çalışmamalı. bunu nasıl sağlayabilirim?