连接两个表以显示第二个表中的行数

时间:2016-11-04 15:08:45

标签: mysql sql magento

我有两个表,ngo_extra_datango_foundation_data。以下是表格的结构。

ngo_extra_data

id | ngo_name         | foundation_id
-----------------------------------------
1  | test ngo 1       | 1
2  | test ngo 2       | 1
3  | test ngo 3       | 2
4  | test ngo 4       | NULL

ngo_foundation_data

id | foundation_name  
----------------------
1  | foundation 1  
2  | foundation 2
3  | foundation 3

现在,我要显示 ngo_foundation_data 的所有内容以及 ngo_extra_data foundation_id非政府组织的数量基础数据表中的id。例如,2个非政府组织在基金会注册,标识为1,1个非政府组织在基金会注册,标识为2。所以预期的输出是

id | foundation_name  |  number_of_ngos
--------------------------------------------
1  | foundation 1     |  2
2  | foundation 2     |  1
3  | foundation 3     |  0

我试着像这样在Magento中编写代码

$collection = Mage::getModel('ngodata/foundations')->getCollection();
$collection->getSelect()
    ->joinLeft(array('ngo' => 'ngo_extra_data'),'main_table.id = ngo.foundation_id',array('foundation_id'))
    ->columns('COUNT(*) AS total_ngos')
    ->group('foundation_id');

它似乎与例外有关。

当没有在基金会下注册非政府组织时,需要" null"作为基础ID提供不正确的结果

如果你能给我相同的SQL代码,我可以把它转换成相应的Magento代码

1 个答案:

答案 0 :(得分:1)

您需要left joingroup by,这样才能获得ngo_extra_data表中不包含的ID的0结果。

select nfd.id,nfd.foundation_name,count(ned.foundation_id) cnt
from ngo_foundation_data nfd
left join ngo_extra_data ned on nfd.id=ned.foundation_id
group by nfd.id,nfd.foundation_name