2010-03-01 4 views
5

J'ai trois tables comme ceci:Zend Framework: Comment combiner trois tables dans une requête en utilisant Joins?

Table Personne:

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

table Adresse:

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

table Person_Address:

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

Maintenant, je veux obtenir tous les documents de la table Person_Address mais aussi avec leurs enregistrements de personne et d'adresse comme ceci par une requête:

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 

Comment est-il possible d'utiliser zend? Merci

Répondre

13

Le guide de référence est le meilleur point de départ pour en apprendre davantage sur Zend_Db_Select. Avec mon exemple ci-dessous, bien sûr:

//$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')); 

Il est donc aussi simple que cela pour extraire une ligne:

$db->fetchRow($select); 

Dans le débogage Zend_Db_Select il y a une astuce que vous pouvez utiliser - il suffit d'imprimer l'objet select , qui à son tour invoque la méthode toString pour produire SQl:

echo $select; //prints SQL 
0

Je ne suis pas sûr si vous cherchez SQL pour faire ce qui précède, ou le code en utilisant les installations de Zend. Compte tenu de la présence de « sql » et « Jointures » dans les balises, voici le SQL que vous aurez besoin:

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 

Gardez à l'esprit que le Person_Address nous dit qu'il ya un grand nombre à plusieurs entre une personne et une adresse. De nombreuses personnes peuvent partager une adresse et une personne peut avoir plus d'une adresse.

Le SQL ci-dessus montrera TOUTES ces relations. Donc, si Naveed a deux enregistrements Address, vous aurez deux lignes dans le jeu de résultats avec person_id = 1.

+0

Oui, je cherche le support JOINs dans zend et je veux savoir comment implémenter votre requête ci-dessus dans zend. Dans mon scénario, une personne n'a qu'une seule adresse à la fois. En tout cas merci pour votre réponse et votre requête m'aidera. – NAVEED

Questions connexes