unir tablas relacionadas multitablas ejemplos datos consultas consultar consulta complejas sql mysql full-text-search

tablas - ejemplos de sql en base de datos



¿Cómo buscar múltiples columnas en MySQL? (5)

Estoy tratando de hacer una función de búsqueda que buscará en varias columnas para encontrar una coincidencia basada en palabras clave. Esta consulta:

SELECT title FROM pages LIKE %$query%;

solo funciona para buscar una columna, noté que al separar los nombres de las columnas con comas se produce un error. Entonces, ¿es posible buscar múltiples columnas en mysql?


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%'';

Lo primero es útil cuando tenemos datos como: ''apellido apellido''.

p.ej

  • parth patel
  • parte p
  • Patel Parth

El segundo es útil cuando tenemos datos como: ''firstname-lastname''. En ella también se pueden utilizar caracteres especiales.

p.ej

  • parth-patel
  • parth_p
  • Patel # Parth

Puede usar los operadores AND u OR, según lo que desee que regrese 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 cláusulas concuerda, se devolverá el registro.

Para obtener más información acerca de lo que puede hacer con las consultas de MySQL SELECT, pruebe la documentation .


Si es solo para buscar, entonces puedes usar CONCATENATE_WS. Esto permitiría la búsqueda de comodines. Puede haber problemas de rendimiento dependiendo del tamaño de la tabla.

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


Si tu mesa es MyISAM :

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

Esto será mucho más rápido si creas un índice FULLTEXT en tus columnas:

CREATE FULLTEXT INDEX fx_pages_title_content ON pages (title, content)

, pero funcionará incluso sin el índice.


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

Por favor, intente con la consulta anterior.