2010-10-06 4 views
0

J'essaye de créer une requête où il y a un compte d'enregistrements liés d'une autre table. J'aimerais que le parent enregistre s'il y a des enregistrements connexes (un compte) ou non.MySQL Left Outer Joindre avec Count à partir de la table jointe, Afficher tous les enregistrements

SELECT r.region_name, r.region_id, r.abbreviation, r.map_order, 
    (IFNULL(COUNT(p.property_id) , 0)) AS propertyCount 
FROM `rmp_region` r 
LEFT OUTER JOIN `rmp_property` p 
    ON p.path LIKE CONCAT( '%/', r.region_id, '/%') 
WHERE p.active =1 
AND r.parent_region_id =1 
GROUP BY r.region_name, r.region_id, r.abbreviation, r.map_order 
ORDER BY r.map_order ASC 

J'ai essayé différentes variations de ce .. mais je ne peux pas obtenir les enregistrements parents pour afficher si le compte est zéro/non enregistrements liés.

merci pour toute aide!

Répondre

2

Vous devez déplacer "p.active = 1" de la clause WHERE dans les critères OUTER JOIN.

Voici votre exemple avec le changement:

SELECT r.region_name, r.region_id, r.abbreviation, r.map_order, 
    (IFNULL(COUNT(p.property_id) , 0)) AS propertyCount 
FROM `rmp_region` r 
LEFT OUTER JOIN `rmp_property` p 
    ON p.path LIKE CONCAT( '%/', r.region_id, '/%') and p.active =1 
WHERE r.parent_region_id =1 
GROUP BY r.region_name, r.region_id, r.abbreviation, r.map_order 
ORDER BY r.map_order ASC 
+0

qui a fait l'affaire! Merci beaucoup. – toddm

+0

des idées sur l'optimisation de cela? Je suis un newbie mysql .. j'ai ajouté des index à la colonne de chemin .. mais n'a pas semblé faire beaucoup. Merci! – toddm

1

Vous avez demandé l'optimiser, dans l'espoir qu'un index sur la colonne « chemin » pourrait aider. Malheureusement, vous recherchez une valeur de chemin qui correspond à LIKE CONCAT( '%/', r.region_id, '/%'), et aucun index dans le monde n'est assez intelligent pour fonctionner avec cela.

Questions connexes