Lenguaje PHP

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.

Buscar varias palabras a la vez en MySQL con PHP
Buscar varias palabras a la vez en MySQL con PHP

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 operador LIKE 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.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba