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

[SOLUCIONADO] problema con consulta

Estas en el tema de problema con consulta en el foro de Bases de Datos General en Foros del Web. hola amigos tengo 4 select dependientes pero tengo un problema en dos consulta pero primero anexo mis tablas: tabla: empleados id_empleados, nombres, apellidos, telefono, email, ...
  #1 (permalink)  
Antiguo 15/06/2017, 17:19
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años
Puntos: 1
problema con consulta

hola amigos tengo 4 select dependientes pero tengo un problema en dos consulta

pero primero anexo mis tablas:

tabla: empleados
id_empleados, nombres, apellidos, telefono, email, direccion

tabla: cuentas_bancarias
id_cuentas_bancarias, id_empleados, numero_cuenta, id_cuentas, id_bancos

tabla: cuentas
id_cuentas, cuentas

tabla: bancos
id_bancos, bancos

en el primer select se muestra todos los empleados registrados, cuando escojamos un empleado en el primer select en el segundo select me muestra que bancos tiene registrado ese empleado hasta hay todo bien mi problema es en el tercer select y cuarto select, si un empleado tiene registrado dos, tres, cuatros bancos registrados cuando escojo el primer banco que tiene registrado me muestra los dos tipos de cuentas y no deberia ser ya que solo deberia mostrar la que tiene asociada a esa cuenta si es ahorro o corriente y cuando trato de escoger otro banco no me muestra nada.


anexo mi consulta y una imagen para ver si me entiendo mejor


Código SQL:
Ver original
  1. FUNCTION listar_cuentas($id_bancos = ''){
  2.     $resultado = FALSE;
  3.     $consulta = "SELECT
  4. cuentas_bancarias.id_cuentas_bancarias,
  5. cuentas_bancarias.id_empleados,
  6. cuentas_bancarias.id_cuentas,
  7. cuentas_bancarias.id_bancos,
  8. cuentas.id_cuentas,
  9. cuentas.cuentas
  10. FROM cuentas_bancarias INNER JOIN cuentas ON cuentas_bancarias.id_cuentas=cuentas.id_cuentas";
  11.    
  12.     IF($id_bancos != ''){
  13.         $consulta .= " WHERE id_empleados = :id_bancos";
  14.     }
  15.  
  16.     $consulta .= " ORDER BY id_cuentas_bancarias";
  17.    
  18.     $conexion = conectaBaseDatos();
  19.     $sentencia = $conexion->PREPARE($consulta);
  20.     $sentencia->bindParam('id_bancos',$id_bancos);
  21.    
  22.     try {
  23.         IF(!$sentencia->EXECUTE()){
  24.             print_r($sentencia->errorInfo());
  25.         }
  26.         $resultado = $sentencia->fetchAll();
  27.        
  28.         $sentencia->closeCursor();
  29.     }
  30.     catch(PDOException $e){
  31.         echo "Error al ejecutar la sentencia: \n";
  32.             print_r($e->getMessage());
  33.     }
  34.    
  35.     RETURN $resultado;
  36. }
  37.  
  38.  
  39.  
  40. FUNCTION listar_numero_cuentas($id_cuentas = ''){
  41.     $resultado = FALSE;
  42.     $consulta = "SELECT
  43. cuentas_bancarias.id_cuentas_bancarias,
  44. cuentas_bancarias.id_empleados,
  45. cuentas_bancarias.id_cuentas,
  46. cuentas_bancarias.numero_cuenta,
  47. cuentas.id_cuentas,
  48. cuentas.cuentas
  49. FROM cuentas_bancarias INNER JOIN cuentas ON cuentas_bancarias.id_cuentas=cuentas.id_cuentas";
  50.    
  51.     IF($id_cuentas != ''){
  52.         $consulta .= " WHERE id_empleados = :id_cuentas";
  53.     }
  54.  
  55.     $consulta .= " ORDER BY cuentas";
  56.    
  57.     $conexion = conectaBaseDatos();
  58.     $sentencia = $conexion->PREPARE($consulta);
  59.     $sentencia->bindParam('id_cuentas',$id_cuentas);
  60.    
  61.     try {
  62.         IF(!$sentencia->EXECUTE()){
  63.             print_r($sentencia->errorInfo());
  64.         }
  65.         $resultado = $sentencia->fetchAll();
  66.        
  67.         $sentencia->closeCursor();
  68.     }
  69.     catch(PDOException $e){
  70.         echo "Error al ejecutar la sentencia: \n";
  71.             print_r($e->getMessage());
  72.     }
  73.    
  74.     RETURN $resultado;
  75. }


ojo: se entiende que un usuario puede tener varias cuentas en un mismo banco

imagen: https://prntscr.com/fkateb
__________________
yoclens avilan
  #2 (permalink)  
Antiguo 16/06/2017, 07:36
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: problema con consulta

Si el empleado tiene 2 cuentas te va a mostrar las 2 porque nada mas estas filtrando por idempleado, no tienes un filtro para las cuentas, la consulta esta bien, solo te faltaria ponerle un filtro para las cuentas.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 16/06/2017, 09:47
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años
Puntos: 1
Respuesta: problema con consulta

Cita:
Iniciado por Libras Ver Mensaje
Si el empleado tiene 2 cuentas te va a mostrar las 2 porque nada mas estas filtrando por idempleado, no tienes un filtro para las cuentas, la consulta esta bien, solo te faltaria ponerle un filtro para las cuentas.

si exactamente era eso gracias por tu comentario
Código SQL:
Ver original
  1. FUNCTION listar_cuentas($id_empleados = ''){
  2.    
  3.     $resultado = FALSE;
  4.     $consulta = "SELECT
  5.                       cuentas_bancarias.id_cuentas_bancarias,
  6.                       cuentas_bancarias.id_empleados,
  7.                       cuentas_bancarias.id_cuentas,
  8.                       cuentas.id_cuentas,
  9.                       cuentas.cuentas
  10.                                    FROM cuentas_bancarias
  11.                                    INNER JOIN cuentas
  12.                                    ON cuentas_bancarias.id_cuentas=cuentas.id_cuentas";
  13.    
  14.     IF($id_empleados != ''){
  15.  
  16.         $consulta .= " WHERE id_bancos = :id_empleados";
  17.    
  18.             }
  19.  
  20.     $consulta .= " ORDER BY cuentas_bancarias.id_cuentas";
  21.    
  22.        $conexion = conectaBaseDatos();
  23.        $sentencia = $conexion->PREPARE($consulta);
  24.        $sentencia->bindParam('id_empleados',$id_empleados);
  25.    
  26.     try {
  27.  
  28.            IF(!$sentencia->EXECUTE()){
  29.  
  30.             print_r($sentencia->errorInfo());
  31.        
  32.             }
  33.            
  34.            $resultado = $sentencia->fetchAll();
  35.        
  36.            $sentencia->closeCursor();
  37.  
  38.           }
  39.             catch(PDOException $e){
  40.                   echo "Error al ejecutar la sentencia: \n";
  41.                   print_r($e->getMessage());
  42.       }
  43.    
  44.     RETURN $resultado;
  45. }
__________________
yoclens avilan

Etiquetas: inner-join
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 14:23.