2011-01-14 9 views
9

Tengo una lista de palabras. Digamos que son 'Apple', 'Naranja' y 'Pera'. Tengo filas en la base de datos de la siguiente manera:MySQL: columna contiene Word de la lista de palabras

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

Busco una consulta en una tabla InnoDB que devolverá la primera y tercera fila, porque la columna content contiene una o más palabras de mi lista. Sé que podría consultar la tabla una vez por cada palabra de mi lista, y usar LIKE y el carácter% comodín, pero me pregunto si hay un solo método de consulta para tal cosa.

Respuesta

14

EDIT:

Algo como esto:

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

Puede bucle de sus palabras para crear condiciones WHERE cláusula.

Por ejemplo:

$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 aparentemente tarde y la suya es más completo, así que supongo que obtendrá un 1. – cbrandolino

+0

Esto es lo que estoy haciendo ahora, y esperaba evitarlo. Si bien evita la sobrecarga de red de las consultas por separado, supongo que MySQL se ejecuta internamente ejecutando cada palabra sobre cada fila en la tabla, que es esencialmente varias consultas. Esperaba que MySQL tuviera una función optimizada para este tipo de consulta. – mellowsoon

+0

Esto también me ayudó, ¡saludó a Naveed, mago! –

Cuestiones relacionadas