Buscar varias palabras a la vez en MySQL con PHP
Buscar varias palabras a la vez en MySQL con PHP. Vamos a aprender cómo buscar varias palabras de una tabla MySQL en una sola consulta en PHP. Desde un cuadro de texto de búsqueda disponible.
Buscar varias palabras a la vez en MySQL con PHP
El usuario ingresa la consulta de búsqueda y obtendrá el resultado de la búsqueda. Este tipo de cosas las aprenderemos en este post.
Estructura del script Búsqueda de múltiples palabras.
vamos a crear un formulario con un cuadro de texto para ingresar una consulta de búsqueda y un botón para buscar. Por lo tanto, cuando el usuario hace clic en el botón de búsqueda, la solicitud de uso se enviará al servidor.
Además, si el usuario ingresa más de una palabra, esas palabras se convertirán en una matriz usando la función
explode()
y desde esa matriz haré una cadena de búsqueda con el operadorLIKE
de MySQL.
Al generar una matriz y realizando una consulta de búsqueda completa para más de una palabra.
a) Datos del formulario
Preparamos los datos enviados por el formulario HTML y lo procesamos
if(isset($_REQUEST['dni']) and $_REQUEST['dni']!=""){
$condition .= ' AND dni LIKE "%'.$_REQUEST['dni'].'%" ';
}
/*Separamos la cadena nombre en partes*/
if (!empty($_REQUEST['nombres'])){
$querys = explode(" ", $_REQUEST['nombres']);
foreach($querys as $text)
{
$condition .= " AND nombre LIKE '%".$text."%' ";
}
}
/*Fin:nombres*/
b) Crear consulta SQL
En este punto ya tenemos procesados los datos del formulario y procedemos a crear la consulta SQL de la siguiente manera.
$query = $db->prepare("SELECT * FROM personal WHERE 1 ".$condition."");
$query->execute();
$data = $query->fetchAll();
c) Imprimir resultados
Para finalizar debemos de mostrar los registros en una tabla. Por lo tanto, vamos a usar FOREACH para devolver los registros.
<table border="1">
<tr>
<th>ID</th>
<th>Nombres</th>
<th>Cargos</th>
</tr>
<?php $no=1; ?>
<?php foreach ($data as $value): ?>
<tr>
<td><?php echo $no ?></td>
<td><?php echo $value['nombres'] ?></td>
<td><?php echo $value['cargos'] ?></td>
</tr>
<?php $no++; ?>
<?php endforeach; ?>
</table>
Buscar en un campo de texto con varias palabras sin importar el orden
Si te gustaría buscar la forma de hacer que un buscador encuentre resultados sin importar el orden en el que lo escribes.
Datos: Si buscas «coche color negro
» me encuentra todos los resultados que contengan «coche color negro
«. Además, si busca «coche negro
» o » negro coche
» debe mostrar resultados.
¿Como podemos buscar para que me devuelva resultados buscando sin orden con PHP & MySQL?
A continuación, veremos un ejemplo completo con la solución
<?php
//Cadena string proveniente de un campo de texto con varias palabras claves
$busqueda = 'coche color negro';
$sqlquery = "SELECT * FROM productos WHERE 1";
//Ciclo para separar las palabras claves
foreach(explode(' ',$busqueda) as $termino){
$sqlquery .=" AND nombre LIKE '%".$termino."%'";
}
//Resultado
echo $sqlquery;
Resultado
La ejecución del script anterior nos dará como resultado la siguiente consulta SQL. Además, este código PHP te generará un SQL tal como el siguiente:
SELECT * FROM productos WHERE 1
AND nombre LIKE '%coche%'
AND nombre LIKE '%color%'
AND nombre LIKE '%negro%';
Si observamos ha creado un bucle con las palabras claves a través de la función EXPLODE()
y usando el ciclo FOREACH. Por lo tanto, se localizarán aquellos registros cuyo campo nombre contenga todos los términos sin importar el orden de digitación.