我有两个表,ngo_extra_data
和ngo_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代码
答案 0 :(得分:1)
您需要left join
和group 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