Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problema al unir consultas

Estas en el tema de Problema al unir consultas en el foro de Bases de Datos General en Foros del Web. Tengo la siguiente consulta en la que pido datos de una tabla "sus" que hace un LEFT JOIN con la tabla "cli" paro obtener la ...
  #1 (permalink)  
Antiguo 28/11/2005, 03:21
 
Fecha de Ingreso: agosto-2004
Mensajes: 43
Antigüedad: 20 años, 3 meses
Puntos: 0
Exclamación Problema al unir consultas

Tengo la siguiente consulta en la que pido datos de una tabla "sus" que hace un LEFT JOIN con la tabla "cli" paro obtener la tarjeta que le corresponde a cada usuario de la tabla "sus". Cuando armo la consulta para filtrar usuarios cuyos vencimientos sean iguales a (sus.Vencim='2005-11-28) y cuya renovacion sea igual a (sus.RenAut='S') y su estado (sus.SusEstcod='A') me arroja un resultado de 200 por ejemplo

mysql_query("SELECT sus.SusCod, sus.SusNom, sus.SusApe, sus.SusTipCod, sus.Vencim, sus.RenAut, sum(sus.Impreal) as suma, cli.TcCod FROM sus
LEFT JOIN cli ON sus.CliCod=cli.CliCod
WHERE sus.Vencim='2005-11-28' AND sus.RenAut='S' AND sus.SusEstcod='A'
GROUP BY sus.CliCod ORDER BY sus.SusCod");


luego al armar esta otra consulta filtrando usuarios cuya fechas de inicio sean iguales a (sus.FecIng='2005-11-01') y su estado (sus.SusEstcod='A') me arroja un resultado de 15 por ejemplo

mysql_query("SELECT sus.SusCod, sus.SusNom, sus.SusApe, sus.SusTipCod, sus.Vencim, sus.RenAut, sum(sus.Impreal) as suma, cli.TcCod FROM sus
LEFT JOIN cli ON sus.CliCod=cli.CliCod
WHERE sus.FecIng='2005-11-01'
AND sus.SusEstcod='A'
GROUP BY sus.CliCod ORDER BY sus.SusCod");


La idea es poder juntar las dos consultas, intente lo siguiente:

mysql_query("SELECT sus.SusCod, sus.SusNom, sus.SusApe, sus.SusTipCod, sus.Vencim, sus.RenAut, sum(sus.Impreal) as suma, cli.TcCod FROM sus
LEFT JOIN cli ON sus.CliCod=cli.CliCod
WHERE
sus.Vencim='2005-11-28' AND sus.RenAut='S' AND sus.SusEstcod='A'
OR
sus.FecIng='2005-11-01' AND sus.SusEstcod='A'
GROUP BY sus.CliCod ORDER BY sus.SusCod");

pero no me funciona en lugar de arrojar un total de
215 que es la suma de los resultados de la dos tablas, me arroja 210, por ejemplo.
Qu estoy haciendo mal al unir las consultas, alguien puede ayudarme!! Gracias!!!!
  #2 (permalink)  
Antiguo 28/11/2005, 03:37
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 9 meses
Puntos: 8
A simple vista va a ser problema de paréntesis. Prueba con ésto:
Código PHP:
mysql_query("SELECT sus.SusCod, sus.SusNom, sus.SusApe, sus.SusTipCod, sus.Vencim, sus.RenAut, sum(sus.Impreal) as suma, cli.TcCod FROM sus
LEFT JOIN cli ON sus.CliCod=cli.CliCod
WHERE
(sus.Vencim='2005-11-28' AND (sus.RenAut='S' or sus.SusEstcod='A'))
OR
(sus.FecIng='2005-11-01' AND sus.SusEstcod='A')
GROUP BY sus.CliCod ORDER BY sus.SusCod"
); 
He modificado sus.RenAut='S' AND sus.SusEstcod='A' por un sus.RenAut='S' or sus.SusEstcod='A' porque no habrá registros que tengan 'A' y 'S' a la vez ¿no?

En cuanto a la consuta en general, lo que quieres es que se de 'una cosa' u 'otra'. Pero cada cosa es un grupo de condiciones, y no te interesa que se evalúen independientemente. Es decir...

... Quiero que me seleccione la gente que es rubia y tiene 30 años o que es morena y tiene 25 años. Puedo hacer dos cosas:

1.- Es rubia y tiene 30 años o es morena y tiene 25 años: No me va a seleccionar nadie porque nadie tiene 30 años y 25 años
2.- (Es rubia y tiene 30 años) o (es morena y tiene 25 años): Esta si hace lo que quiero. Primero evalúa cada paréntesis y luego selecciona los que cumplen uno de los dos...

Espero haberme explicado. Si no, me lo comentas

Saludos
__________________
Kelpie
  #3 (permalink)  
Antiguo 28/11/2005, 04:16
 
Fecha de Ingreso: agosto-2004
Mensajes: 43
Antigüedad: 20 años, 3 meses
Puntos: 0
Problema al unir consultas (2)

Kelpie gracias por tu rapida respuesta, te comento utlize la consulta que me pasaste

mysql_query("SELECT sus.SusCod, sus.SusNom, sus.SusApe, sus.SusTipCod, sus.Vencim, sus.RenAut, sum(sus.Impreal) as suma, cli.TcCod FROM sus
LEFT JOIN cli ON sus.CliCod=cli.CliCod
WHERE (sus.Vencim='2005-11-28' AND (sus.RenAut='S' AND sus.SusEstcod='A')) OR
(sus.FecIng='2005-11-01' AND sus.SusEstcod='A')
GROUP BY sus.CliCod ORDER BY sus.SusCod");

pero poniendo AND en lugar de OR en la parte de (sus.RenAut='S' AND sus.SusEstcod='A'), sucede que necesito que se den estas dos condiciones por como esta armado el sistema.

Bien probe todo con y sin parentensis pero el resultado sigue siendo el mismo de 210, al hacer la consulta sume los registros que tienen FecIng='2005-11-01' y en lugar de ser 15 son menos.

Que otra cosas pensas que podria ser?
Gracias!
  #4 (permalink)  
Antiguo 28/11/2005, 06:23
 
Fecha de Ingreso: agosto-2004
Mensajes: 43
Antigüedad: 20 años, 3 meses
Puntos: 0
Kelpie Volvi a probar la consulta, y me parece que esta funcionando bien, tengo un error de concepto en la consulta, luego comentare
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 23:06.