Foros del Web » Programando para Internet » PHP »

Busqueda con multiples campos

Estas en el tema de Busqueda con multiples campos en el foro de PHP en Foros del Web. Hola a todos! a ver si me pueden echar una mano por favor. Tengo un formulario con múltiples desplegables, cuya primera opción en cada uno ...
  #1 (permalink)  
Antiguo 18/05/2011, 02:56
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Busqueda con multiples campos

Hola a todos! a ver si me pueden echar una mano por favor.
Tengo un formulario con múltiples desplegables, cuya primera opción en cada uno de ellos es vacío. Tengo que realizar una búsqueda que se haga dependiendo de los campos que se seleccionen. Es decir si tengo los siguiente campos: Grupo, proyecto, interlocutores, consultor, fechainicio, fechafin... pueda realizar la búsqueda por uno de esos campos o por varios.

Gracias y un saludo.
  #2 (permalink)  
Antiguo 18/05/2011, 05:13
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Busqueda con multiples campos

Yo lo hago algo así
Código PHP:
Ver original
  1. <?php
  2. $value = array();
  3. foreach($_POST as $v){
  4.     //limpieza de los valores para evitar XSS
  5.     // ......
  6.     if(!empty($v)){
  7.         $value[] = $v;
  8.     }
  9. }
  10. $where = !empty($valor)
  11.     ? ' WHERE ' . implode(' AND ', $value)
  12.     : '';
  13. $sql = 'SELECT * FROM tabla ' . $where;
  14. //consulta....
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 18/05/2011, 05:23
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 3
Respuesta: Busqueda con multiples campos

muchas gracias !
justo ahora lo acabo de resolver gracias al sql. lo que he hecho ha sido incluir en las select una opción antes del while que esté vacía aparentemente pero con el valor '%'.

Código:
    public function obtenerGruposTODOS(){
	$query = "SELECT grupo FROM grupos ";
	$consulta = new Consulta($query);
			    
	$grupos = "<select name='".group."'>\n";
	$grupos .= " <option value='%'></option>";
	while($fila=$consulta->obtener_fila()){
	    //concatenamos y le damos el value a la opcion
	    $grupos .= " <option value='".$fila['grupo']."'>".$fila['grupo']."</option>";
	}
	//concatenamos y cerramos el select
	$grupos .= "</select>\n";
De esta manera si se elige esta opción, en la sentecia sql aparecerá LIKE '%' en el caso de que se elija esta opción o LIKE 'valorseleccionado'

Código:
SELECT trabajos.idtrabajo AS idtrabajo, trabajos.indi AS indi, trabajos.grupo AS grupo, clientes.cliente AS cliente, trabajos.ot AS ot, proyectos.proyecto AS proyecto, interlocutores.interlocutor AS interlocutor, trabajos.f_inicio AS f_inicio, trabajos.f_fin AS f_fin, trabajos.descripcion AS descripcion, trabajos.cantidad AS cantidad, trabajos.escalado AS escalado, trabajos.descripcionescalado AS descripcionescalado, trabajos.tiempo_real AS tiempo_real, trabajos.preciototal AS preciototal, trabajos.pago_actuacion AS pago_actuacion, trabajos.nocturna AS nocturna , trabajos.comentarios AS comentarios, status.statu AS statu, trabajos.descripcionstatus AS descripcionstatus, actividades.actividad AS actividad, tallas.talla AS talla, tallas.tiempo AS tiempo, tallas.precio AS precio, consultores.consultor AS consultor, trabajos.pagohoras AS pagohoras, trabajos.horas AS horas
FROM (((interlocutores INNER JOIN ((clientes INNER JOIN trabajos ON clientes.Id_cliente = trabajos.cliente) INNER JOIN proyectos ON trabajos.proyecto = proyectos.Id_proyecto) ON interlocutores.Id_inerlocutor = trabajos.interlocutor) INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor) INNER JOIN status ON trabajos.status_idstatus = status.idstatus) INNER JOIN ((actividades_tallas INNER JOIN actividades ON actividades_tallas.idactividad = actividades.Id_actividad) INNER JOIN tallas ON actividades_tallas.idtalla = tallas.id_talla) ON trabajos.idactiv_tall = actividades_tallas.idacttal
WHERE (((trabajos.f_inicio)>='$fechainicio' And (trabajos.f_inicio)<='$fechafin' AND (trabajos.grupo) LIKE '$grupo' AND (proyectos.proyecto) LIKE '$proyecto' AND (clientes.cliente) LIKE '$cliente'));

Etiquetas: campos, multiples, 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 13:56.