Busqueda inteligente en pagina php?

davidd1991

Ante todo muchisimas gracias a todos los que me ayudan en estos posts de programacion...
Tengo otra pequeña dudilla...
os pongo en situacion, tengo un formulario y este consulta a una base de datos con un select en la pagina .php, hasta ahi todo bien. Cuando hago esto me muestra los valores de tabla que digo en el cuadro de texto, pero en este cuadro tengo que poner el nombre exacto (es bastante largo) para que me consulte, cosa normal!
hay alguna forma de hacer una busqueda inteligente?, algo asi:

TABLA NOMBRE

en la tabla nombre hay un campo llamado JUAN ANTONIO AGUILAR DE MENDOZA CURRISPITOSA

hay alguna forma de, por ejemplo, poniendo JUAN en el cuadro de texto, o JUAN ANTONIO, ... me consulte igual?

creo que no me he explicado pero bueno...
muchas gracias y un saludo!!!

SiNSoNiDo

Si te he entendido bien lo que deberías es utilizar es la palabra clave LIKE en la consulta sql -> http://sql.1keydata.com/es/sql-like.php

GaN2

Estoy casi seguro que si, creo que a la consulta SQL se le puede decir que coja los datos de una tabla en caso de que coincida algo del cierto campo, pero no se muy bien como.

Poisonous

No se si te entendi bien, pero puedes mostrar todos los nombres de la tabla en forma de link o de list y elegir d cual de ellos quieres consultar la informacion

djtonight

como dice #2, has de usa LIKE en la consulta sql

GaN2

SELECT *
FROM Datos_Cliente
WHERE Nombe LIKE '%ANTONIO%';

Esto te sirve?

davidd1991

$consulta = mysql_query("SELECT ns, marca, modelo, empresa, mac, ubicacion, sububicacion FROM articulos WHERE ns = '$_POST[aqui]'", $conexion);

tengo esa consulta, para que haga la busqueda inteligente he probado con esto:

$consulta = mysql_query("SELECT ns, marca, modelo, empresa, mac, ubicacion, sububicacion FROM articulos WHERE ns = '%$_POST[aqui]%'", $conexion);

pero nada, me da error, algun remedio?

SiNSoNiDo

Lo que has de poner es:

$consulta = mysql_query("SELECT ns, marca, modelo, empresa, mac, ubicacion, sububicacion FROM articulos WHERE ns LIKE '%".$_POST[aqui]."%'", $conexion);

Siendo ns el nombre del campo de la tabla en la cual estás buscado y $_POST[aqui] la palabra a buscar.

Soltrac

es LIKE, no =.

De todas formas, es MUY mejorable. Con la manera q te propusieron, si estuviera guardado en la base de datos "JUAN ANTONIO" (con 2 espacios) y buscaras "JUAN ANTONIO", no aparecería.

o si estuviera "JUAN ANTONIO PEREZ" y buscaras "JUAN PEREZ" tampoco aparecería.

Existen muchas formas de mejorarlo, yo creo q también pondría:

LIKE '%JUAN%PEREZ%', para q ignore lo q existe entre juan y perez.

Ah, y poniendo un LIKE y el $_POST ahí a pelo estás abierto a q te hagan SQL Injection de todas las formas posibles.

JuAn4k4

Haz una funcion que lea lo del $_POST y lo reescriba en una string con % en los espacios, y que compruebe que ninguna palabra que aparezca ahi sea palabra reservada de sql.

HoTiTo

Otra solución es que en vez de tener un campo con el nombre completo, hagas 2. Uno para el nombre y otro para el apellido.

Buscas por el nombre y punto pelota. Además, te permite algunas posibilidades más.

JuAn4k4

Que pongan Juan y el tio este como Juanito. xD

El titulo del post pone busqueda inteligente, lo de buscar solo por nombre es busqueda sin mas.

Usuarios habituales

  • JuAn4k4
  • Soltrac
  • SiNSoNiDo
  • davidd1991
  • GaN2
  • djtonight
  • Poisonous