Foros del Web » Programando para Internet » PHP »

consulta sql por varios criterios

Estas en el tema de consulta sql por varios criterios en el foro de PHP en Foros del Web. hola queridos amigos... pido colaboracion para soluiconar el siguiente problema... tengo tres listas, y un input por las cuales se debe consultar la informacion de ...
  #1 (permalink)  
Antiguo 02/09/2009, 15:17
 
Fecha de Ingreso: septiembre-2009
Mensajes: 55
Antigüedad: 14 años, 8 meses
Puntos: 0
consulta sql por varios criterios

hola queridos amigos...

pido colaboracion para soluiconar el siguiente problema...

tengo tres listas, y un input por las cuales se debe consultar la informacion de una persona.

$sql=mysql_query("select * from personas,contrato,evento where personas.cedula=contrato.cedula_beneficiarioc and personas.cedula=evento.cedula_beneficiario and evento.barrio like '%$barrio_evento%' and evento.comuna like '%$comuna_evento%' and personas.estado_atencion like '%$estado_atencion%' and evento.tipo_evacuacion like '%$tipo_evacuacion%'");
$result = mysql_query($sql,$link);
$total = mysql_num_rows($sql);

el problema es que cuando condiciono a que solo me debe traer los registros que sean Iguales me acepta una de las condiciones.

necesito que se pueda consultar por cualquier criterio que el usuario quiera..

sea por uno, por dos o por tres criterios a la vez.

mil gracias
  #2 (permalink)  
Antiguo 02/09/2009, 15:21
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: consulta sql por varios criterios

Mira este post para que tengas una idea http://www.forosdelweb.com/f18/busqu...select-727385/
__________________
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 02/09/2009, 16:00
 
Fecha de Ingreso: septiembre-2009
Mensajes: 55
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: consulta sql por varios criterios

Gracias

vi el post pero no me aclara mucho ya que al parecer el ejercicio tenia errores o no estaba dando el resultado esperado..

tambien lo hice y no me arroja mucho...

no hay posibilidad de confiar en el filtro que realiza.

Alguna otra idea ?
  #4 (permalink)  
Antiguo 02/09/2009, 16:02
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: consulta sql por varios criterios

Hola,

Yo lo haría de esta forma y me ahorraría mucho código, y de esta forma puedo chequear 'todas' las combinaciones en un solo select, pero es solamente mi opinión:

Código:
select * from personas, contrato, evento
where
personas.cedula = contrato.cedula_beneficiarioc and 
personas.cedula = evento.cedula_beneficiario and
('$barrio_evento' = '' or evento.barrio like '%$barrio_evento%') and
('$comuna_evento' = '' or evento.comuna like '%$comuna_evento%') and
('$estado_atencion' = '' or personas.estado_atencion like '%$estado_atencion%') and
('$tipo_evacuacion' = '' or evento.tipo_evacuacion like '%$tipo_evacuacion%')
(Las combinaciones de 3 opciones usando 'if...else', es el factorial de 3 = 6 variaciones, pero con más opciones crece exponencialmente)

Saludos,
  #5 (permalink)  
Antiguo 02/09/2009, 16:10
 
Fecha de Ingreso: septiembre-2009
Mensajes: 55
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: consulta sql por varios criterios

Amigos

si lo realizo de manera con esta estructura me muestra los datos...
$sql=mysql_query("select * from personas,contrato,evento where personas.cedula=contrato.cedula_beneficiarioc and personas.cedula=evento.cedula_beneficiario and evento.barrio like '%$barrio_evento%' and evento.comuna like '%$comuna_evento%' and personas.estado_atencion like '%$estado_atencion%' and evento.tipo_evacuacion like '%$tipo_evacuacion%'");
$result = mysql_query($sql,$link);
$total = mysql_num_rows($sql);

pero como trabajo con like me trae datos que no son precisos; por ejemplo, en comunas me trae las comunas que tienen el "1"; cuando solo pedi los datos de la comuna 1.

y si lo realizo con "=" cuando no desean buscar por comuna esta queda null y en la consulta me trae lo que el usuario pide pero con comuna=null.
  #6 (permalink)  
Antiguo 02/09/2009, 16:40
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: consulta sql por varios criterios

Hola,

Ooops, por allí hubieras comenzado, porque para mí no tiene nada que ver con la pregunta inicial. Posiblemente puedas resolverlo con expresiones regulares.

Saludos.
  #7 (permalink)  
Antiguo 03/09/2009, 06:46
 
Fecha de Ingreso: septiembre-2009
Mensajes: 55
Antigüedad: 14 años, 8 meses
Puntos: 0
no, es solo intentos a solucionar mi problema.

La verdad se me estan acabando las ideas, mi principal problema es el filtro.

cuando realizo un consulta no me trae coincidencia exacta por que lo programo con "like".
Pero si lo hago con "and" u "or" tengo que seleccionar todas las opciones o ninguna para que me pueda funcionar.

Última edición por GatorV; 03/09/2009 a las 08:39
  #8 (permalink)  
Antiguo 03/09/2009, 07:14
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: consulta sql por varios criterios

Es que la idea inicial que te envie del post, hace lo que estas pidiendo pero tienes que leerlo de principio a final ya que fui corrigiendo con la persona lo que el queria. Por eso al final indica que si le funciona.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 03/09/2009, 10:33
 
Fecha de Ingreso: septiembre-2009
Mensajes: 55
Antigüedad: 14 años, 8 meses
Puntos: 0
De acuerdo Respuesta: consulta sql por varios criterios

por fin he podido conseguir que me muestre los datos.

pero en una consulta que deberia mostrar 40 o 50 registros me muestra 172.854.

me ayudan por favor.

//$comuna = $_POST['b1'];
//$estado_atencion = $_POST['b2'];
//$barrio = $_POST['b3'];
//$tipo_evacuacion = $_POST['b4'];

$comuna = $_POST['b1'];
$estado_atencion = $_POST['b2'];
$barrio = $_POST['b3'];
$tipo_evacuacion = $_POST['b4'];
if(empty($comuna_evento)) { echo "esta vacio"; }

$comuna = (!empty($_POST["b1"])
? " comuna='".trim($_POST["b1"])."'"
: "");

$barrio = (!empty($_POST["b3"])
? (!empty($comuna)
? " AND barrio='".trim($_POST["b3"])."'"
: " barrio='".trim($_POST["b3"])."'")
: "");

$estado_atencion = (!empty($_POST["b2"])
? (!empty($comuna) || !empty($barrio)
? " AND estado_atencion='".trim($_POST["b2"])."'"
: " estado_atencion='".trim($_POST["b2"])."'")
: "");

$tipo_evacuacion = (!empty($_POST["b4"])
? (!empty($comuna) || !empty($barrio) || !empty($estado_atencion)
? " AND tipo_evacuacion='".trim($_POST["b4"])."'"
: " tipo_evacuacion='".trim($_POST["b4"])."'")
: "");


$sql = "SELECT * FROM personas,evento WHERE "
. $comuna
. $barrio
. $estado_atencion
. $tipo_evacuacion;
$result = mysql_query($sql) or die(mysql_error());
$total = mysql_num_rows($result);
  #10 (permalink)  
Antiguo 03/09/2009, 10:41
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: consulta sql por varios criterios

Te sugiero hacer un var_dump() de las variables antes de que hagas la consulta y despues que las declaras
Código php:
Ver original
  1. var_dump($comuna);
  2. var_dump($barrio);
  3. var_dump($estado_atencion);
  4. var_dump($tipo_evacuacion);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 03/09/2009, 11:22
 
Fecha de Ingreso: septiembre-2009
Mensajes: 55
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: consulta sql por varios criterios

amigo me trae esta informacion

NULL NULL string(8) "CONTRATO" string(10) "DEFINITIVA"

pero los registro se aumentan en una proporcion incalculable, ha pasado que sql no es capaz con la carga.

es raro por que lo reviso y aparentemente no hay nada fuera de lo comun.

¿ no existe otra forma de hacerlo ?

la verdad le he trabajado mucho, y el problema no es que no me los muestre. me muestra algo erroneo
  #12 (permalink)  
Antiguo 03/09/2009, 11:40
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: consulta sql por varios criterios

¿Pero que error te da? Si te fijas las variables te estan trayendo una informacion que no es como la declaraste en las condiciones. Se supone que te salgan como si fueran consultas para la base de datos. Te sugiero quitar esta parte ya que no creo sea necesaria

Código PHP:
Ver original
  1. //$comuna = $_POST['b1'];
  2. //$estado_atencion = $_POST['b2'];
  3. //$barrio = $_POST['b3'];
  4. //$tipo_evacuacion = $_POST['b4'];
  5.  
  6. $comuna = $_POST['b1'];
  7. $estado_atencion = $_POST['b2'];
  8. $barrio = $_POST['b3'];
  9. $tipo_evacuacion = $_POST['b4'];
  10. if(empty($comuna_evento)) { echo "esta vacio"; }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #13 (permalink)  
Antiguo 03/09/2009, 13:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 55
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: consulta sql por varios criterios

Amigo

el error es que me salen hasta 175800 registros en una consulta que deberia mostrar solo 30.

no se donde puede estar el error ya que lo que me dijiste que quitara lo quite pero no influyo en nada.
  #14 (permalink)  
Antiguo 03/09/2009, 13:15
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: consulta sql por varios criterios

Ok, estamos por pasos ya que dependo de lo que me vayas indicando. Lo siguiente, ya quitado lo que te pedi que quitaras. Ahora necesito que hagas un var_dump de nuevo a las variables. Claro esta lo vas a hacer despues de que las hayas declarado y antes de la consulta. Es más, mientras tanto la consulta comentala para que no corra. Porque nos tenemos que asegurar que las variables esten correctas. Haz la prueba y me dejas saber.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 03/09/2009, 13:19
 
Fecha de Ingreso: septiembre-2009
Mensajes: 55
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: consulta sql por varios criterios

creo que el problema es por este lado...

tengo dos tablas
personas y evento, tengo que cruzar las tablas para que me traiga los valores.
algo como where personas.cedula=evento.cedula_beneficiario

en esta sentencia seria asi ?

$sql = "SELECT * FROM personas,evento WHERE personas.cedula=evento.cedula_beneficiario"
. $comuna
. $barrio
. $estado_atencion
. $tipo_evacuacion;
$result = mysql_query($sql) or die(mysql_error());
$total = mysql_num_rows($result);

por que me sale un error.
  #16 (permalink)  
Antiguo 03/09/2009, 13:23
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: consulta sql por varios criterios

¿ por que no habias posteado esto desde el principio?. Fijate lo que estas haciendo, tienes un where con una informacion ya declarada en la consulta, la siguiente variable no hace un AND por lo que te va a generar un error. Ya en este caso no es necesario hacer las condiciones anteriores indicando si debe añadir un and o no, ya que siempre es obligado que haya un and.
Código PHP:
Ver original
  1. $comuna = (!empty($_POST["b1"])
  2. ? " AND comuna='".trim($_POST["b1"])."'"
  3. : "");
  4.  
  5. $barrio = (!empty($_POST["b3"])
  6. ? " AND barrio='".trim($_POST["b3"])."'"
  7. : "");
  8.  
  9. $estado_atencion = (!empty($_POST["b2"])
  10. ? " AND estado_atencion='".trim($_POST["b2"])."'"
  11. : "");
  12.  
  13. $tipo_evacuacion = (!empty($_POST["b4"])
  14. ? " AND tipo_evacuacion='".trim($_POST["b4"])."'"
  15. : "");
  16.  
  17.  
  18. $sql = "SELECT * FROM personas,evento WHERE "
  19. . $comuna
  20. . $barrio
  21. . $estado_atencion
  22. . $tipo_evacuacion;
  23. $result = mysql_query($sql) or die(mysql_error());
  24. $total = mysql_num_rows($result);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #17 (permalink)  
Antiguo 03/09/2009, 13:30
 
Fecha de Ingreso: septiembre-2009
Mensajes: 55
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: consulta sql por varios criterios

Amigo

listo mil gracias por tu colaboracion y paciencia.

el error estaba en que no estaba teniendo en cuenta las tablas donde se almacenaba la informacion.

el codigo quedo asi.

$comuna = (!empty($_POST["b1"])
? " comuna='".$_POST["b1"]."'"
: "");

$barrio = (!empty($_POST["b3"])
? (!empty($comuna)
? " AND barrio='".$_POST["b3"]."'"
: " barrio='".$_POST["b3"]."'")
: "");

$estado_atencion = (!empty($_POST["b2"])
? (!empty($comuna) || !empty($barrio)
? " AND estado_atencion='".$_POST["b2"]."'"
: " estado_atencion='".$_POST["b2"]."'")
: "");

$tipo_evacuacion = (!empty($_POST["b4"])
? (!empty($comuna) || !empty($barrio) || !empty($estado_atencion)
? " AND tipo_evacuacion='".$_POST["b4"]."'"
: " tipo_evacuacion='".$_POST["b4"]."'")
: "");



$sql = "SELECT * FROM personas,evento WHERE personas.cedula=evento.cedula_beneficiario and"
. $comuna
. $barrio
. $estado_atencion
. $tipo_evacuacion;
$result = mysql_query($sql) or die(mysql_error());
$total = mysql_num_rows($result);

?>
  #18 (permalink)  
Antiguo 03/09/2009, 13:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: consulta sql por varios criterios

Te sugiero no colocar el and directamente en la consulta, verifica el que te dije para que lo hagas correctamente. Ya que de esa forma tambien puede traer un error. Imaginate que no tengas declarado la primera variable $comuna cuando haga la consulta te va a generar un error porque va a tener declarado AND AND .... Mejor declaralo en la variable de $comuna
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
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 17:32.