2011-01-14 10 views
9

Kelimelerin bir listesi var. 'Elma', 'Turuncu' ve 'Armut' olduklarını söyleyelim. Böyle veritabanında satırlar var: content sütun benim listeden bir veya daha fazla kelime içerdiğinden ben, 1. ve 3. satır dönecektir bir InnoDB'nin masada bir sorgu için arıyorumMySQL: Column, Kelime Listesinden Word İçeriyor

------------------------------------------------ 
|author_id | content      | 
------------------------------------------------ 
| 54   | I ate an apple for breakfast. | 
| 63   | Going to the store.    | 
| 12   | Should I wear the orange shirt? | 
------------------------------------------------ 

. Listemdeki her bir kelime için tabloyu bir kez sorgulayabilirim ve LIKE ve% joker karakterini kullanabilirim, ama böyle bir şey için tek bir sorgu yöntemi olup olmadığını merak ediyorum.

cevap

14

DÜZENLEME: Böyle

şey:

SELECT FROM yourtable WHERE content LIKE '%apple%' OR content LIKE '%orange%' 

Sen döngü sözlerin fıkra koşulları yaratmak için olabilir. Örnek için

:

$words = array('apple', 'orange'); 
$whereClause = ''; 
foreach($words as $word) { 
    $whereClause .= ' content LIKE "%' . $word . '%" OR'; 
} 

// Remove last 'OR' 
$whereClause = substr($whereClause, 0, -2); 

$sql = 'SELECT FROM yourtable WHERE' . $whereClause; 

echo $sql; 

Output:

SELECT FROM yourtable WHERE content LIKE "%apple%" OR content LIKE "%orange%" 
+2

ah, geç anlaşılan ve seninki daha kapsamlı, bu yüzden bir +1 alırsınız sanırım. – cbrandolino

+0

Şimdi yaptığım şey bu, ve bundan kaçınmayı umuyordum. Ayrı sorguların ağ yükünden kaçınmakla birlikte, MySQL'in dahili olarak her sözcüğü tablonun her satırında çalıştırdığı varsayılır. MySQL'in bu tür bir sorgu için optimize edilmiş bir işlevi olduğunu umuyordum. – mellowsoon

+0

Bu da bana yardım etti, Naveed, sihirbaz! –