Foros del Web » Programando para Internet » PHP » Zend »

multiples condiciones en join usando zend framework

Estas en el tema de multiples condiciones en join usando zend framework en el foro de Zend en Foros del Web. Hola a todos quesiera saber si es que se puede replicar esta consulta sql usando zend framework Cita: SELECT DISTINCT "r"."id_rol", "r"."nombre", "rp"."persona" FROM "rol" ...
  #1 (permalink)  
Antiguo 13/02/2009, 12:46
Avatar de poloche  
Fecha de Ingreso: abril-2006
Ubicación: cochabamba
Mensajes: 93
Antigüedad: 18 años, 7 meses
Puntos: 1
Mensaje multiples condiciones en join usando zend framework

Hola a todos quesiera saber si es que se puede replicar esta consulta sql usando zend framework

Cita:
SELECT DISTINCT "r"."id_rol", "r"."nombre", "rp"."persona"
FROM "rol" AS "r" LEFT JOIN "persona_rol" AS "rp"
ON r.id_rol=rp.rol AND (rp.persona='per-121')
WHERE (r.estado='Activo')
ORDER BY "rp"."persona" ASC
yo la tengo planteada de esta manera

Código PHP:
public function findAllNotAsigned1($persona) {
        
$results = array();
        
$db $this->getAdapter ();
        
$select $db->select ();
        
$select->distinct(TRUE);
        
$select->from ( array ('r' => 'rol' ), array ('id_rol''nombre' ) );
        
$select->joinLeft( array ('rp' => 'persona_rol' ), 'r.id_rol=rp.rol AND rp.persona="'.$persona.'"',array('persona') );
//        $select->where ( 'rp.persona=?', $persona );
        
$select->where 'r.estado=?''Activo' );
        
$select->order 'rp.persona' );
        echo 
$select->__toString();
        
$results $db->fetchAll $select );
        return 
$results;
    } 
pero me sale este error

Código HTML:
exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42703]: Undefined column: 7 ERROR: 
column "per-105" does not exist LINE 2: ...na_rol" AS "rp" ON r.id_rol=rp.rol AND rp.persona="per-105" ... ^' in D:\MobiusWS\Quantum\library\Zend\Db\Statement\Pdo.php:238 Stack trace: #0 D:\MobiusWS\Quantum\library\Zend\Db\Statement.php(283): Zend_Db_Statement_Pdo->_execute(Array) #1 D:\MobiusWS\Quantum\library\Zend\Db\Adapter\Abstract.php(433): Zend_Db_Statement->execute(Array) #2 D:\MobiusWS\Quantum\library\Zend\Db\Adapter\Pdo\Abstract.php(230): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Select), Array) #3 D:\MobiusWS\Quantum\library\Zend\Db\Adapter\Abstract.php(644): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Select), Array) #4 D:\MobiusWS\Quantum\application\default\models\RolModel.php(62): Zend_Db_Adapter_Abstract->fetchAll(Object(Zend_Db_Select)) #5 D:\MobiusWS\Quantum\application\default\controllers\UsermanagerController.php(92): RolModel->findAllNotAsigned1('per-105') #6 D:\MobiusWS\Quantum\library\Zend\Controller\Action.php(503): UserManagerController->editarAction() #7 D:\MobiusWS\Quantum\library\Zend\Controller\Dispatcher\Standard.php(285): Zend_Controller_Action->dispatch('editarAction') #8 D:\MobiusWS\Quantum\library\Zend\Controller\Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(    
plis si alguien puede ayudar le estare agradecido
__________________
no estare lejos, por que siempre estare junto a ti
  #2 (permalink)  
Antiguo 13/02/2009, 14:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: multiples condiciones en join usando zend framework

Segun tengo entendido las multiples condiciones en los joins solamente pueden darse entre dos columnas, no puedes en este caso hacer un join con un valor.

Estas seguro que esa consulta te da resultados?, viendo el Manual de MySQL, las condiciones del JOIN tienen que ser columnas, por ejemplo:
Código sql:
Ver original
  1. SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

Por eso te marca el error si te fijas te dice que no encuentra una columna llamada "per-105" ya que esta evaluando y buscando una columna en lugar de buscar por el valor.

Saludos
  #3 (permalink)  
Antiguo 27/02/2009, 15:42
Avatar de poloche  
Fecha de Ingreso: abril-2006
Ubicación: cochabamba
Mensajes: 93
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: multiples condiciones en join usando zend framework

pues si el caso es que estoy usando postgres y si esa consulta me da resultados
Cita:
"rol-101";"Vendedor";"per-121" "rol-100";"Administrador";"" "rol-102";"Propietario";"" "rol-103";"Auditor";"" "rol-104";"Supervisor";"" "rol-105";"Encomiendas";"" "rol-106";"Aux Contable";"" "rol-107";"Acceso";"" "rol-109";"Secretaria";"" "rol-110";"Aux Administracion";"" "rol-112";"Administrador Mobius";"" "rol-113";"ADMIN SUCURSAL";""
ese es el resultado de la consulta
__________________
no estare lejos, por que siempre estare junto a ti
  #4 (permalink)  
Antiguo 27/02/2009, 15:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: multiples condiciones en join usando zend framework

Mmm no se que tan correcto (conceptual) sea, porque no implementas ese join usando un WHERE?

Saludos
  #5 (permalink)  
Antiguo 28/02/2009, 04:53
 
Fecha de Ingreso: diciembre-2007
Mensajes: 42
Antigüedad: 17 años
Puntos: 1
Respuesta: multiples condiciones en join usando zend framework

los joins producen un producto cartesiano no ? lo leí para los self join, no sé si todos los joins lo hacen. En ese caso un mal filtrado puede dar problemas de rendimiento muy gordos no ??? La premisa sería evitar siempre ke sea posible usar joins ?
  #6 (permalink)  
Antiguo 28/02/2009, 10:01
Avatar de poloche  
Fecha de Ingreso: abril-2006
Ubicación: cochabamba
Mensajes: 93
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: multiples condiciones en join usando zend framework

pues lo he intentado he puesto el en el where la condicion que ahora esta en el join pero el resultado es que me filta de la respuesta del join con la condicion del where y solo nos deja esos resultados.

Ah por si acaso estoy usando postgres
__________________
no estare lejos, por que siempre estare junto a ti
  #7 (permalink)  
Antiguo 28/02/2009, 13:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: multiples condiciones en join usando zend framework

Esque es muy raro, veo que imprimes la consulta, esa consulta generada si la ejecutas contra el gestor de BDD te regresa resultados?
  #8 (permalink)  
Antiguo 03/03/2009, 07:09
Avatar de poloche  
Fecha de Ingreso: abril-2006
Ubicación: cochabamba
Mensajes: 93
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: multiples condiciones en join usando zend framework

en efecto esa es la impresion de la consulta y si me da los resultados expuestos, realizo la consulta en pgadmin III y todo anda bien
__________________
no estare lejos, por que siempre estare junto a ti
  #9 (permalink)  
Antiguo 03/03/2009, 10:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: multiples condiciones en join usando zend framework

Mmm entonces no creo que el error sea exactamente de Zend, si no del driver que usas de fondo, si te fijas, la excepción viene del driver, prueba ejecutar directamente la consulta usando Zend_Db, o más abajo usando PDO y ve si la ejecuta, si la ejecuta es probable que sea un bug de Zend FW, y lo puedes reportar.

Saludos
  #10 (permalink)  
Antiguo 10/03/2009, 17:09
Avatar de poloche  
Fecha de Ingreso: abril-2006
Ubicación: cochabamba
Mensajes: 93
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: multiples condiciones en join usando zend framework

Aun no lo he provado como lo necesitaba de urgencia lo resolvi de otra manera pero creo que esa es la mas optima, tratare de resolverlo de la forma en que lo planteas y si acaso es un bug lo reportare gracias como siempre tus respuestas muy utiles.
__________________
no estare lejos, por que siempre estare junto a ti
  #11 (permalink)  
Antiguo 11/03/2009, 17:16
Avatar de poloche  
Fecha de Ingreso: abril-2006
Ubicación: cochabamba
Mensajes: 93
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: multiples condiciones en join usando zend framework

GatorV una consulta mas por fis

al realizar la consulta el left join me devolvera los datos de la tabla de la derecha mas los de la izquierda, en caso de que no exista los de la izquierda me devuelve nulo verdad?
__________________
no estare lejos, por que siempre estare junto a ti
  #12 (permalink)  
Antiguo 11/03/2009, 17:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: multiples condiciones en join usando zend framework

Así es, para eso sirve el LEFT JOIN, te recomiendo si tienes dudas te des una vuelta por el foro de Bases de Datos.
  #13 (permalink)  
Antiguo 13/03/2009, 12:09
Avatar de poloche  
Fecha de Ingreso: abril-2006
Ubicación: cochabamba
Mensajes: 93
Antigüedad: 18 años, 7 meses
Puntos: 1
De acuerdo Respuesta: multiples condiciones en join usando zend framework

bueno logre resolver esta duda de la siguiente manera
Código PHP:

public function findBySubmenu($id_submenu$rol) {
        
$db $this->getAdapter ();
        
$select $db->select ();
        
$select->distinct true );
        
$select->from ( array ('a' => 'accion' ), 
                array (
'id_accion''nombre''titulo''url_accion''img' ) );
        
$select->joinLeft ( array ('ar' => 'accion_rol' ), "a.id_accion=ar.accion and ar.rol='$rol'", array ('rol' ) );
        
$select->where 'a.submenu=?'$id_submenu );
        
$select->order 'ar.rol' );
        
$select->order 'a.nombre' );
        
$results $db->fetchAll $select );
        
$acciones = array ();
        foreach ( 
$results as $resu ) {
            
$accion = new Accion ( );
            
$accion->setId $resu ['id_accion'] );
            
$accion->setNombre $resu ['nombre'] );
            
$accion->setTitulo $resu ['titulo'] );
            
$accion->setAccion $resu ['url_accion'] );
            
$accion->setImagen $resu ['img'] );
            
$asignado false;
            if (
$resu ['rol'] != ""){
                
$asignado true;
            }
            
$accion->setAsigned $asignado );
            
$acciones [] = $accion;
        }
        return 
$acciones;
    } 
veran esta un poco mas elaborado que al princiio pero la consulta es esencialmente la misma puedo poner multiples condiciones en un join en este caso el problema que reportaba era que me reconocia la condicion como si fuera una columna de la tabla, pero eso era por la forma en la que yo enviaba los datos
Cita:
$select->joinLeft ( array ('ar' => 'accion_rol' ), 'a.id_accion=ar.accion and ar.rol="$rol"', array ('rol' ) );
malllllllll
se deberia pasar de esta manera
Cita:
$select->joinLeft ( array ('ar' => 'accion_rol' ), "a.id_accion=ar.accion and ar.rol='$rol'", array ('rol' ) );
si se dan cuenta el error iva al pasar el parametro del join mandaba con comillas simples el segundo parametro y deberia ir en comillas dobles ", y la variable $rol pasada con ' comillas simples
__________________
no estare lejos, por que siempre estare junto a ti
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 00:55.