Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Mysql veri tabanında arama

yazilar adında bir tablom var ve tablo da id, yazi, baslik, yazi_tipi adında sütunlarım var.

Benim yapmak istediğim yazi ve baslik sutunlarında aynı anda arama yaptırmak.

$sql = "SELECT DISTINCT * FROM yazilar
            WHERE yazi_tipi='yazi'
            AND yazi LIKE '%".$kelime."%'
            UNION
            SELECT * FROM yazilar
            WHERE  yazi_tipi='yazi'
            AND baslik LIKE '%".$kelime."%'
";


Ben bu şekilde yaptım çalışıyor da ama asıl sormak istediğim yöntemim ne kadar doğru ve hızlı. Ayrıca siz nasıl bir şekilde arama yaptırıyorsunuz ?

Önerileriniz için şimdiden teşekkürler .
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • 3
    yaramazca adlı üyenin fotoğrafı
    7 yıl önce yazılmış
    11 cevap - 0 soru
    Ben sana burda mysql MATCH AGAINST i önerisim.

    Kullanımı şöyle:

     
    SELECT * FROM yazılar  WHERE MATCH(yazi,baslik) AGAINST ('$kelime');
    


    yi öneririm. Kolonların indeksinide Full Text yaparsan çok hızlı ve stabil sonuç alırsın. ('$kelime') alanına birden fazla kelime de yazabiliyorsun ve başlarına + veya - koyarak biri olsun biri olmasın veya ikisi birden olsun ve şundan ne kadar fazlaysa o daha üstte görünsün diyebiliryorsun.

    Ayrıntılı bilgi için http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html adresini imceleyebilirsin.


    Bir dezavantajı var kelime arıyor. Hecelemelerde işe yaramaz.
    • Alexander adlı üyenin fotoğrafı Alexander
      Kelime arıyor hecelemelerde işe yaramaz derken tam anlamadım?
      7 yıl önce yazılmış
    • yaramazca adlı üyenin fotoğrafı yaramazca
      Mesela aramak istediğiniz kelime "makale" ise "maka" kelimesine birşey döndürmez. Kelime tam olarak yazılmalıdır.
      7 yıl önce yazılmış
    • Alexander adlı üyenin fotoğrafı Alexander
      Biraz araştırdımda kelimenin sonuna * koyunca o kelime ile başlayanları buluyor böylece birebir kelmie ile örtüşmese bile bulacak .

      $sql = "SELECT * FROM WHERE MATCH(yazi,baslik) AGAINST ('$kelime*')";
      
      7 yıl önce yazılmış
    • yaramazca adlı üyenin fotoğrafı yaramazca
      Evet buda güzel bak :). Performans olarak memnun kalacagından eminim. İndeksleri unutma. Teşekkürler.
      7 yıl önce yazılmış
    • Alexander adlı üyenin fotoğrafı Alexander
      İlk işim indexleri belirlemek oldu :) . Çok teşekkürler .
      7 yıl önce yazılmış
    • yaramazca adlı üyenin fotoğrafı yaramazca
      Rica ederim. İyi çalışmalar.
      7 yıl önce yazılmış
    • yaramazca adlı üyenin fotoğrafı yaramazca
      $sql = "SELECT * FROM WHERE MATCH(yazi,baslik) AGAINST ('$kelime*')"; 


      bu bende neden bulmuyor peki. Kelime yazmadan yine bulmuyor. Mesela serkan* buluyorda serk* bulmuyor.


      Full text sanırım sadece kelime aramalarında işe yarıyor. Kelimeyi ikiye bölünce işe yaramıyor.
      7 yıl önce yazılmış
    • Alexander adlı üyenin fotoğrafı Alexander
      mysql sürümünden kaynaklanıyor olabilir . Ben de sorunsuz bir şekilde çalışıyor ...
      7 yıl önce yazılmış

Cevaplar

Hiç cevap bulunamadı.