2012-06-19 12 views
13

Her zaman MySQL'de bir şeyler sorgulamak için LIKE deyiminde OR kullanabileceğinizi düşündüm. Yani, 1 anahtar kelime veya terime arka arkaya birden çok alan karşılaştırmak istiyorsa:Birden çok alanı karşılaştırmak için MySQL içinde MyLQL'de OR Kullanılıyor

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword%'; 

ve ben olsaydı kelimelerin bir dizi karşılaştırma:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword1%' 
AND Column1 OR Column2 LIKE '%keyword2%'; 

O sözdizimi inanmıyorum Ancak, doğrudur. Bu doğru yaklaşık gidiş

SELECT * FROM MyTable WHERE Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%' AND Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'; 

Am: gibi bir şey bir yana bu yazı verimli bir yöntem var mı?

+0

Sadece "kelime dizisi" algoritmanız hakkında merak ediyorum ... Bir sütun bir kelimeye benziyorsa ve bir sütun diğerine benziyorsa sonuç almak istediğinizden emin misiniz? – Sebas

+0

bana oldukça verimsiz gözüküyor, prosedürleri de kullanabilirsiniz. – vijay

+0

Anahtar sözcük (ler) bir arama alanından geliyor, böylece kullanıcılar birçok alana dayalı bir veritabanında arama yapmak isteyeceklerdir. Arama terimlerinde 2 kelime kullanırlarsa, bu terim için her iki sütunu da aramak mantıklıdır. Bir alanı hariç tutmak istemiyorum çünkü birden fazla ilgili kelime içerme olasılığı var. – RCNeil

cevap

21

bunu kullanın ::

SELECT * FROM MyTable WHERE (Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%') AND (Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'); 
+0

ah. Anladım parantez gerekli? Bu neden daha önce çalışmadığını açıklıyor .... – RCNeil

+1

evet… VE'nin önceliği OR'den yüksektir, bu yüzden diş telleri gereklidir ... –

+0

harika. Cevabınız için çok teşekkür ederim! – RCNeil

17

sen diliyoruz sözdizimi en yakın olan:

SELECT * FROM MyTable 
WHERE (CONCAT(Column1, Column2) LIKE '%keyword1%') 
AND (CONCAT(Column1, Column2) LIKE '%keyword2%') 

Not: Arama dizisi başında "%" kullanılmasını engeller olduğunu indeksleri. Aranacak çok sayıda kayıt varsa, uygulamayı yeniden düşünmek en iyisidir.

+0

Cevabınız için teşekkürler! – RCNeil

+1

İki karakter sütunu birlikte eklerseniz, sayı olarak yayınlanacak ve eklenecektir. Büyük olasılıkla sonuç sıfır olacak ve WHERE ifadeniz asla doğru olarak değerlendirilmeyecektir. MySQL'de sütunları birleştirmek için CONCAT kullanın. –

+0

Bunun için, CONCAT() ... – Mazrick

İlgili konular