Pregunta

Tengo la siguiente consulta MySQL:

SELECT  *
FROM    customer
WHERE   
fName LIKE '%#attributes.q#%' AND deleted = 'N'
OR 
lName LIKE '%#attributes.q#%' AND deleted = 'N'

Esto funciona muy bien para conjeturas, pero si usted proporciona una coincidencia exacta: "Bill Clinton" fname = factura lname = Clinton a la consulta anterior se obtiene 0 resultados? donde cuenta Clint da resultados.

¿Cómo puede esta consulta se actualizará decir encontrar como resultado e igual a resultados?

¿Fue útil?

Solución

Es difícil de decir de su pregunta, pero supongo que su tabla de clientes quedará del siguiente modo:

id    fName    lName      deleted
---------------------------------
1     John     Doe        N
2     Bill     Clinton    N
3     Fred     Smith      N
4     George   Bush       Y

Su consulta, como usted ha declarado que en su pregunta, nunca funcionará, ya que se verá así:

SELECT *
FROM customer
WHERE fname LIKE '%Bill Clinton%' AND deleted = 'N'
OR
  lName LIKE '%Bill Clinton%' AND deleted = 'N'

No hay registros en la tabla donde los campos FName O lname contienen "Bill Clinton"

Usted tendría que dar masajes a su # # attributes.q texto por lo que va a generar algo como esto:

SELECT *
FROM customer
WHERE ((fName LIKE '%Bill%') OR (fName LIKE '%Clinton%')) AND deleted = 'N'
OR
   ((lName LIKE '%Bill%') etc.....

COMO comparaciones son muy similares utilizando comodines en los nombres de archivo. No van a dividir un bloque de texto para usted, pero le dirá si existe un trozo de texto, palabra por palabra, dentro de otro trozo de texto.

Creo que lo que necesita es un búsqueda de texto completo , que tendrá en cuenta las palabras individuales en una cadena de consulta y devolver resultados. Por supuesto, FULLTEXT sólo está disponible en los tipos de tabla MyISAM, por lo que si usted está utilizando InnoDB o algún otro tipo, estás de suerte.

Otros consejos

FYI - Índices de texto sólo se pueden utilizar con tablas InnoDB o MyISAM, y se pueden crear sólo para CHAR, VARCHAR o columnas TEXT

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top