MySQL Select yardım lütfen

5 Cevap php

Ben kullanıcı tarafından girilen bir arama dizesi içeren bir sorgu dizesi var.

Ben sorgu dizesi benim tablodaki 2 alanları (açıklama ve başlık) aramak istediğiniz ..

Basitçe, ben herhangi VEYA İKİ, sorgu dizesi içeriyorsa, hem de alanları kontrol etmek istiyorum ...

Ben arada PHP kullanıyorum ...

     SELECT * FROM db WHERE xxxxxxxxxxxxxxxxxxx?

Tüm yardım için teşekkür ederiz ...

OK, but there is a problem... When i try the simple query SELECT * FROM db WHERE description LIKE '$variable' OR headline LIKE '$variable'

SORUN bu alan dize değeri, neden TAM OLARAK aynı olmak istiyor mu?

Teşekkürler

5 Cevap

Her iki sütun üzerinde bir tam dizin oluşturun ve sonra MATCH(description, headline) AGAINST('searchstring') command of mysql or you could do a simple LIKE sorgu kullanabilirsiniz:

SELECT *
  FROM db
 WHERE description LIKE '%searchstring%'
    OR headline LIKE '%searchstring%'

Uygulayabileceğiniz basit bir çözüm gibi kullanarak desen eşleştirme olduğunu.

SELECT * FROM db WHERE description LIKE "%querystring%" OR headline LIKE "%querystring%"

Bu konuda daha fazla bilgi için bu check out:

http://www.webdevelopersnotes.com/tutorials/sql/mysql%5Freference%5Fguide%5Fpattern%5Fmatching%5Fwith%5Ftext%5Fdata.php3

Sadece sizin için bir veritabanında metin arama için ayrılmış birçok üçüncü parti araçları da bulunuyor. Sizin sorgular ağır olacak olursa, bu çözümlerden birini kullanarak daha iyiyiz.

Ve emin yapmak için son şey, kötü niyetli bir kullanıcı SQL niyetinde olmadığını komutları koşamam şekilde sorguda kullanmadan önce sorgu dizesi sterilize olmasıdır.

Select * from mytable where column a = 'querystring' or columnb = 'querystring'

hem sonra olmasını istiyorum ile veya eğer

Select * from mytable where column a = 'querystring' and columnb = 'querystring'

Eğer tam bir eşleşme istemiyorsanız ya da benzeri kullanın

Select * from mytable where column a like '%querystring%' or columnb = '%querystring%'

% Emin değilim eğer mysql için joker

SELECT * FROM db WHERE ( description LIKE '%querystring%' OR headline LIKE '%querystring%' )

Eğer hazırlanmış deyimleri kullanarak değilseniz, emin mysql_real_escape_string ile kullanıcı girişi kaçış yapmak ()

Büyük veri setleri ile ancak bu yöntem giderek daha yavaş olacaktır.

Veri seti büyük olur ve alan türleri text tam metin indeksleme kullanmayı düşünün ve eğer

MATCH

Benim deneyim MAÇ hatta büyük veri kümeleri üzerinde inanılmaz hızlı olmasıdır.

Eğer veritabanı öldürmek istiyorsanız, en iyi uygulama bir büyük metin (açıklama, vb) bir LIKE '%SOME_STRING%' yapmaktır.

Eğer MyISAM tabloları kullanırsanız, daha iyi (Bu gerçekten kolay) boolean modunda FULLTEXT search kullanmak zorunda.