2010-03-25 18 views
25

Estoy intentando hacer una función de búsqueda que buscará varias columnas para encontrar una coincidencia basada en palabra clave. Esta consulta:¿Cómo buscar múltiples columnas en MySQL?

SELECT title FROM pages LIKE %$query%; 

sólo funciona para buscar una columna, me di cuenta que separa los nombres de columnas con comas resulta en un error. Entonces, ¿es posible buscar múltiples columnas en mysql?

Respuesta

30

Puede usar los operadores AND u OR, según lo que desee que devuelva la búsqueda.

SELECT title FROM pages WHERE my_col LIKE %$param1% AND another_col LIKE %$param2%; 

Ambas cláusulas deben coincidir para que se devuelva un registro. Alternativamente:

SELECT title FROM pages WHERE my_col LIKE %$param1% OR another_col LIKE %$param2%; 

Si cualquiera de las dos cláusulas coincide, el registro será devuelto.

Para obtener más información sobre lo que puede hacer con MySQL SELECT consultas, intente con documentation.

+0

¿Qué parámetros tienen el mismo valor? Diga, ¿está buscando si 'Steven' está en el primer nombre o apellido de un usuario? (Dado que los usuarios son una tabla, last_name y first_name son columnas). – onebree

+1

@HunterStevens En ese caso, consulte [esta otra respuesta a esta pregunta] (http://stackoverflow.com/a/30365428/2908724). – bishop

12

Si la tabla es MyISAM:

SELECT * 
FROM pages 
WHERE MATCH(title, content) AGAINST ('keyword' IN BOOLEAN MODE) 

Esto será mucho más rápido si se crea un índice FULLTEXT en sus columnas:

CREATE FULLTEXT INDEX fx_pages_title_content ON pages (title, content) 

, pero va a trabajar incluso sin el índice.

+2

Esto es bueno, pero sólo funciona en coincidencias exactas, una búsqueda de los perros no devolverá una página titulada perro. – George

+1

No, puedes usar el comodín 'perro *' para unir 'perros' y 'perro'. aunque no puedes usar '* dog' para obtener 'adog'. Solo se admiten comodines anteriores. – DavidLin

33

Si solo es para buscar, entonces es posible que pueda usar CONCATENATE_WS. Esto permitiría la búsqueda de comodines. Puede haber problemas de rendimiento según el tamaño de la tabla.

SELECT * 
FROM pages 
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%' 
+1

¡Ja! Tropezó con esto. Buen truco. ¡Gracias! – raupach

+1

Tenga cuidado al unirse a CONCAT -https: //www.percona.com/blog/2007/10/16/be-careful-when-joining-on-concat/ – londox

-1
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%'); 

favor, intente con consulta anterior.

1

1)

select * 
from employee em 
where CONCAT(em.firstname, ' ', em.lastname) like '%parth pa%'; 

2)

select * 
from employee em 
where CONCAT_ws('-', em.firstname, em.lastname) like '%parth-pa%'; 

En primer lugar es muy útil cuando tenemos datos como: 'nombre apellido'.

por ejemplo

  • parth Patel
  • parth p
  • Patel parth

En segundo lugar es útil cuando se dispone de datos como: 'Nombre-Apellido'. En él también puedes usar caracteres especiales.

e.g

  • parth-Patel
  • parth_p
  • Patel # parth
Cuestiones relacionadas