Bir tablo MySQL & aranıyor

4 Cevap php

Ben url, bir arama dize değerleri kullanarak bir MySQL tablo ile arama ve XML çıktısı olarak sonuçlarını görüntülemek için mümkün olmak istiyorum.

Ben aşağı arama dize biçimlendirme ve değişkenleri ilan var düşünüyorum.

Ben tüm tabloyu arıyor var sorun, ben önceki cevaplar için SO üzerinde baktım ve hepsi arama için tablodaki her sütun bildirmek zorunda gibi görünüyor.

Aşağıdaki gibi Yani, örneğin benim veritabanı düzeni:

**filesindex**
-filename
-creation
-length
-wall
-playlocation

Her şeyden önce, aşağıda tanımlanan uygun olacaktır:

$query = "SELECT * FROM filesindex WHERE filename LIKE '".$searchterm."%'
          UNION
          SELECT * FROM filesindex WHERE creation LIKE '".$searchterm."%'
          UNION
          SELECT * FROM filesindex WHERE length LIKE '".$searchterm."%'
          UNION
          SELECT * FROM filesindex WHERE wall LIKE '".$searchterm."%'
          UNION
          SELECT * FROM filesindex WHERE location LIKE '".$searchterm."%'";

Ya da ideal, bir masa aramak için daha az hardcoding içeren daha kolay bir yolu var.

Herhangi bir fikir?

Teşekkürler

4 Cevap

UNION etmeyin, zincir arama terimleri AND veya OR kullanarak yapabilirsiniz. Aksi takdirde basit kodunuzu tutmak istiyorsanız Ve evet, sabit kod alanları gerekir.

$query = "SELECT * FROM filesindex WHERE filename LIKE '".$searchterm."%'
      OR creation LIKE '".$searchterm."%'
      OR length LIKE '".$searchterm."%'
      OR wall LIKE '".$searchterm."%'
      OR location LIKE '".$searchterm."%'";

LIKE, yavaş ve verimsiz. Eğer MyISAM depolama motorunu kullanarak eğer full-text search kullanarak düşünebilirsiniz.

Sorgu bu gibi yeniden yazılabilir

$query = "SELECT * FROM filesindex WHERE filename LIKE '".$searchterm."%'
          OR creation LIKE '".$searchterm."%'
          OR length LIKE '".$searchterm."%'
          OR wall LIKE '".$searchterm."%'
          OR location LIKE '".$searchterm."%'";

Eğer sütunlardan biri arama terimini içeren tüm kayıtları bulmak istiyorsanız.

Bunun yerine birlik, kullanın OR:

$query   = "SELECT  *
            FROM    filesindex
            WHERE   filename LIKE '".$searchterm."%'
            OR      creation LIKE '".$searchterm."%'
            OR      length LIKE '".$searchterm."%'
            OR      wall LIKE '".$searchterm."%'
            OR      location LIKE '".$searchterm."%'";

Ama - Zend Lucene yerine MySQL gibi bir dosya tabanlı arama sistemini kullanarak öneriyoruz.