2011-01-14 12 views
9

Ho un elenco di parole. Diciamo che sono "Apple", "Orange" e "Pera". Ho le righe nel database come questo:MySQL: colonna contiene Word dall'elenco di parole

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

Sto cercando una query su una tabella InnoDB che restituirà il 1 ° e 3 ° fila, perché la colonna content contiene una o più parole dalla mia lista. So che potrei interrogare la tabella una volta per ogni parola nella mia lista, e usare LIKE e il carattere jolly%, ma mi chiedo se esiste un singolo metodo di query per una cosa del genere?

risposta

14

EDIT:

Qualcosa di simile a questo:

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

È possibile ciclo tue parole per creare condizioni WHERE clausola.

Per esempio:

$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

uh, era apparentemente in ritardo e il vostro è più completa, quindi credo che si otterrà un +1. – cbrandolino

+0

Questo è quello che sto facendo ora, e speravo di evitarlo. Mentre evita il sovraccarico della rete di query separate, suppongo che MySQL stia eseguendo internamente l'esecuzione di ogni parola su ogni riga della tabella, che è essenzialmente diverse query. Speravo che MySQL avesse una funzione ottimizzata per questo tipo di query. – mellowsoon

+0

Anche questo mi ha aiutato, saluta Naveed, mago! –

Problemi correlati