2011-01-19 3 views
3

J'ai 3 tables (commander, produit, order_item). En order j'ai la date. En order_item j'ai product_id et order_id. Je dois sélectionner tous les produits avec les commandes, ce qui a créé dans le mois en cours. C'est mon choix:zend framework joindre 3 tables

$select = $this->select() 
    ->setIntegrityCheck(false) 
    ->from(array('o' => 'order')) 
    ->join(array('oi' => 'order_item'), 'o.id = oi.order_id', array('quantity')) 
     ->joinLeft(array('p' => 'product'), 'p.id = oi.product_id', array('id', 'pbv', 'name')) 
     ->where('MONTH(o.date) = MONTH(CURDATE())'); 

Mais quand je n'ai pas de commandes, le résultat est vide. Et je devrais toujours avoir tous les produits. Désolé pour mon anglais. Merci.

Répondre

1

C'était très dur. Le droit SQL:

USE lyf; 
SELECT 
    * 
FROM 
    `order` AS o 
    LEFT JOIN order_item AS oi ON oi.order_id = o.id 
    RIGHT JOIN product AS p ON oi.product_id = p.id 
WHERE 
    IF(o.`date` IS NOT NULL, MONTH(o.`date`) = MONTH(NOW()), 1) = 1 
0

Vous devez soit passer vos joinLeft à un joinRight ou mettre votre table de produit d'abord dans la requête.