2010-03-01 12 views
5

Tengo tres tablas como esta:Zend Framework: ¿Cómo combinar tres tablas en una consulta usando Joins?

mesa

persona: mesa

person_id | name  | dob 
-------------------------------- 
    1  | Naveed | 1988 
    2  | Ali  | 1985 
    3  | Khan  | 1987 
    4  | Rizwan | 1984 

Dirección:

address_id | street | city | state | country 
---------------------------------------------------- 
    1  | MAJ Road | Karachi | Sindh | Pakistan 
    2  | ABC Road | Multan | Punjab | Pakistan 
    3  | XYZ Road | Riyadh | SA | SA 

mesa Person_Address:

person_id | address_id 
---------------------- 
    1  |  1 
    2  |  2 
    3  |  3 

Ahora quiero conseguir todos los registros de la tabla Person_Address pero también con sus registros de persona y dirección así por una consulta:

person_id| name | dob | address_id | street | city | state | country 
---------------------------------------------------------------------------------- 
    1 | Naveed | 1988 | 1  | MAJ Road | Karachi | Sindh | Pakistan 
    2 | Ali | 1985 | 2  | ABC Road | Multan | Punjab | Pakistan 
    3 | Khan | 1987 | 3  | XYZ Road | Riyadh | SA | SA 

¿Cómo es posible usar zend? Gracias

Respuesta

13

La guía de referencia es el mejor punto de partida para obtener información acerca de Zend_Db_Select. Junto con mi ejemplo a continuación, por supuesto:

//$db is an instance of Zend_Db_Adapter_Abstract 
$select = $db->select(); 
$select->from(array('p' => 'person'), array('person_id', 'name', 'dob')) 
     ->join(array('pa' => 'Person_Address'), 'pa.person_id = p.person_id', array()) 
     ->join(array('a' => 'Address'), 'a.address_id = pa.address_id', array('address_id', 'street', 'city', 'state', 'country')); 

Es tan simple como esto para ir a buscar una fila:

$db->fetchRow($select); 

En la depuración Zend_Db_Select hay un truco inteligente puede utilizar - simplemente imprimir el objeto seleccionado , que a su vez invoca el método toString para producir SQl:

echo $select; //prints SQL 
0

No estoy seguro de si está buscando SQL para hacer lo anterior, o el código que utiliza las instalaciones de Zend. Dada la presencia de "SQL" y "une" en las etiquetas, aquí está el SQL que había necesidad:

SELECT p.person_id, p.name, p.dob, a.address_id, street, city, state, country 
FROM person p 
INNER JOIN Person_Address pa ON pa.person_id = p.person_id 
INNER JOIN Address a ON a.address_id = pa.address_id 

Tenga en cuenta que el Person_Address nos dice que hay una relación de muchos a muchos entre una persona y una dirección. Muchas personas pueden compartir una dirección, y una persona puede tener más de una dirección.

El SQL anterior mostrará TODAS esas relaciones. Por lo tanto, si Naveed tiene dos registros de direcciones, tendrá dos filas en el conjunto de resultados con person_id = 1.

+0

Sí, estoy buscando el apoyo de JOINs en zend y quiero saber cómo implementar su consulta anterior en zend. En mi caso, una persona tiene una sola dirección a la vez. De todos modos, gracias por su respuesta y su consulta me ayudará. – NAVEED

Cuestiones relacionadas