Foros del Web » Programando para Internet » PHP »

Ayuda con una busqueda avanzada

Estas en el tema de Ayuda con una busqueda avanzada en el foro de PHP en Foros del Web. Hola que tal, como siempre yo preguntando, bueno es que apenas empece a utilizar PHP a fondo y ahora las dudas surgen. Bueno esta vez, ...
  #1 (permalink)  
Antiguo 14/04/2010, 21:35
Avatar de SymarCs  
Fecha de Ingreso: abril-2010
Mensajes: 67
Antigüedad: 14 años
Puntos: 1
Ayuda con una busqueda avanzada

Hola que tal, como siempre yo preguntando, bueno es que apenas empece a utilizar PHP a fondo y ahora las dudas surgen.

Bueno esta vez, necesito realizar una busqueda avanzada, tengo una base de datos en MySQL ya realizo busquedas simples de nombres con un:

$sql = "select * from tabla where nombre like '%".$nombre."'%";

Por esa parte no hay problema por que la busqueda es solo con un simple dato, pero como les decia necesito hacer una busqueda avanzada donde debo manipular.

-6 input text
-6 select

Mis datos son mas o menos asi, y abajo como tengo los input y select.

Nombre | Edad | Sueldo | Anios_laborando | etc

[__input__] (Nombre)

[__input__] [_V_] (Edad)

[__input__] [_V_] (Sueldo)

[__input__] [_V_] (Anios_laborando)

En los select tengo 5 opciones <,<=,=,>=,> por ejemplo si quisiera mostrar todos los empleados que sean mayores de 30 años (de edad) en la caja de texto escribiria 30 y seleccionaria (en el select) el simbolo >.

Edad: [>] [30]

Mi gran duda es como hago esa busqueda avanzada, es decir si ademas de ese dato selecciona que el sueldo sea menor a $10000, como creo la consulta (que sea dinamica). Para no estar creando muchas consultas con todas las convinaciones (por que eso seria una tonteria segun yo ja). No se si dejando las variables sin datos (URL de abajo) me pueda ocasionar un error u obtener datos errones despues de realizar la consulta.

http://URL/consultas.php?nombre=pedro&edad=&sueldo=1000&anio_ laborando=
  #2 (permalink)  
Antiguo 15/04/2010, 08:02
Avatar de AnesGy  
Fecha de Ingreso: mayo-2009
Mensajes: 518
Antigüedad: 15 años
Puntos: 19
Respuesta: Ayuda con una busqueda avanzada

para unir consultas en SQL se usa AND:

Vamos a poner 2 elementos

un input (Nombre) y un input-select(Edad):

Código PHP:
Ver original
  1. $sql = "SELECT * FROM `miTabla` WHERE `Nombre`= '".$_POST['Nombre']."' AND `Edad` ".$_POST['Edad_op']." '".$_POST['Edad']."';"

He tenido que el select de la operación (< > <= ...) de Edad se llama Edad_op.

Si sigues añadiendo términos llegarás al completo de tu sistema.
__________________
Si alguna vez parece que soy grosero, pido perdón, es un intento fallido de ser directo.

AnesGy SD. Name it, Get it
  #3 (permalink)  
Antiguo 15/04/2010, 09:41
Avatar de SymarCs  
Fecha de Ingreso: abril-2010
Mensajes: 67
Antigüedad: 14 años
Puntos: 1
Respuesta: Ayuda con una busqueda avanzada

Bueno gracias, pero creo que no me entendiste o no me explique como deberia ser. Lo de unir consultas con AND u OR lo se hacer.

Mi duda es como hacer una consulta dinamica o mejor dicho general, mi form esta como lo dije:

<form method="get" action="consultas.php">

Nombre: [ ]
Edad: [V] [ ]
Sueldo: [V] [ ]
Antiguedad: [V][ ]

[Buscar]

</form>

Al dar click en 'buscar' va a recoger los datos pormedio de un GET pero claro que los usuarios no siempre van a buscar lo mismo (osea no todos van a llenar los mismos campos). Algunos van a buscar solo el nombre, otros solo el sueldo, otros tal vez busquen el nombre mas la edad y la antiguedad.

Ejemplos de busquedas.

Usuario 1.-
Nombre: Pedro
Edad: <40

Usuario 2.-
Edad: >35
Antiguedad: <20

Usuario 3.-
Nombre: Pablo
Sueldo>1000
Edad=25

Usuario 4.-
Sueldo>1000
Edad = 25
Antiguedad <=15

Esas son ejemplos de busquedas, el usuario 1 solo quiere buscar a una persona con el nombre pedro y que tenga menos de 40 años. El usuario 2 quiere buscar una cosa totalmente diferente y asi para los demas usuarios.

Entonces al momento de hacer la consulta como puedo realizarla si las variables para formarla
no siempre van a ser las mismas. Para no tener que meter todas las combinaciones posibles.

Si(nombre)
$sql = "select * from tabla where like '%".$nombre."%'";
Si(nombre y edad)
$sql = "select * from tabla where".$nombre." AND edad".$edad_op."".$edad;
Si(nombre y edad y sueldo)
etc
Si(nombre y edad y sueldo y antiguedad)
etc
Si(edad)
Si(edad y sueldo)
...

Me entienden, algo mas general para no tener varias cadenas $sql con las diferentes posibilidades de consulta por parte de los usurios

[URL="http://www.google.com.mx/advanced_search?hl=es"]-------------Un ejemplo[/URL]

Un ejemplo claro seria la "busqueda avanzada de google" cuando la usamos no todos llenamos los mismos campos (es mas un mismo usuario puede llenar algunos campos y para la otra busqueda que haga llena otros).


Otra cosa a que te refieres con

[quote]
Si sigues añadiendo términos llegarás al completo de tu sistema.
[quote]

-->llegare al completo de mi sistema.

Última edición por SymarCs; 15/04/2010 a las 09:57
  #4 (permalink)  
Antiguo 15/04/2010, 09:51
Avatar de zokratez  
Fecha de Ingreso: febrero-2005
Mensajes: 41
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Ayuda con una busqueda avanzada

Tenes que usar comidines (%) y la sentencia LIKE en lugar de =

Aca esta explicado...

http://dev.mysql.com/doc/refman/5.0/es/string-comparison-functions.html

Por ultimo esto es MY-SQL, nada tiene que ver con PHP...
  #5 (permalink)  
Antiguo 15/04/2010, 10:01
Avatar de SymarCs  
Fecha de Ingreso: abril-2010
Mensajes: 67
Antigüedad: 14 años
Puntos: 1
Respuesta: Ayuda con una busqueda avanzada

Si perdon me faltaba el like en el ejemplo que puse pero ya lo agrege. Por que no mejor entran aqui:

http://www.google.com.mx/advanced_search?hl=es

Es la busqueda avanzada de google, asi es mas o menos la idea que estoy tratando de hacer desde hace unos dias.

Tiene varios campos, los cuales no son necesarios que se llenen todos, pero si se pueden llenar algunos ya sea solo 1, 2, 3 o tal vez todos. Y apartir de los campos y los datos que se tomen del GET realizar la consulta.
  #6 (permalink)  
Antiguo 15/04/2010, 10:01
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Ayuda con una busqueda avanzada

Cita:
Iniciado por zokratez Ver Mensaje
Por ultimo esto es MY-SQL, nada tiene que ver con PHP...
Si que tiene, pues lo q está tratando de hallar es la lógica para armar su query.

Bueno, sin verlo mucho yo usaría algo parecido a
Código PHP:
$sql "select * from tabla where 1=1";
if (
condicion 1){
 
$sql.="and campo1=valor1";
}
if (
condicion 2){
 
$sql.=" and campo2=valor2";
}
//etcetera etcetera 
Creo que hay mejores formas, pero ahora mismo no se me ocurre ninguna
Pero para ilustrar creo q está bien
  #7 (permalink)  
Antiguo 15/04/2010, 10:11
Avatar de SymarCs  
Fecha de Ingreso: abril-2010
Mensajes: 67
Antigüedad: 14 años
Puntos: 1
Respuesta: Ayuda con una busqueda avanzada

Exactamente eulloa, eso es lo que estoy buscando dependiendo de que campos que fueron llenados armar la query.

Ahora si hay otra forma si usar tantos IF por favor posteenla para checarla y adaptarla a mi sistema de busqueda.

Bueno ya va quedando mas clara mi duda para llegar a resolverla, gracias seguire esperando mas respuestas.
  #8 (permalink)  
Antiguo 15/04/2010, 10:30
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Ayuda con una busqueda avanzada

Las condiciones siempre vas a tener q valorarlas, siendo aqui o allá, pero en algún lugar tendrás que validar quienes llegan vacíos y quienes no y pasarán a formar parte de la consulta
  #9 (permalink)  
Antiguo 15/04/2010, 12:37
Avatar de SymarCs  
Fecha de Ingreso: abril-2010
Mensajes: 67
Antigüedad: 14 años
Puntos: 1
Respuesta: Ayuda con una busqueda avanzada

ok si ya lo resolvi con los IFs, solo una correcion en el codigo de eulloa.

Despues de pasarle, por cualquier metodo las variables (yo uso el GET) el codigo quedaria asi:

$nombre = $_GET['nombre']; //$nombre = pedro
$edad = $_GET['edad']; //$ edad = 40
$edadop = $_GET['edadop']; //operadores <,<=,=,>=,>

Debe quedar asi
Código PHP:
$sql "select * from tabla where ";
if (
$nombre!=''){//Si el campo nombre tiene datos
 
$sql $sql."nombre like '%".$nombre."%'";
}
if (
$edad){//Si el campo tiene datos
 
$sql $sql." AND edad".$edadop."".$edad;
}
//etcetera etcetera 
Y la consukta entonces quedaria:

$sql = "select * from tabla where nombre like '%pedro%' and edad>40";

Gracias, por las prontas respuestas pero aun sigo pensando si habra otra forma de realizarlo, ya que si los datos son mas esta manera no seria la mas adecuada. o si???
  #10 (permalink)  
Antiguo 15/04/2010, 12:43
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Ayuda con una busqueda avanzada

Código PHP:
Ver original
  1. $sql = $sql."nombre like '%".$nombre."%'"; //ummmmmmm
  2. $sql .= "nombre like '%'".$nombre."%"; /***mejor, pero aun te aconsejo leer el aporte de pateketrueke de cómo utilizar las comillas bie, utiliza el mismo buscador del foro***/

Etiquetas: busquedas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:58.