我使用下面的代码从mysql数据库中检索数据。这给了我一个结果,我无法理解它是如何生成的逻辑。我想要的是仅在contrib_page_id为1且货币为RUB的条件下从数据库获取total_amount的SUM。我怎样才能做到这一点?
感谢。
<?php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('total_amount')));
$query->from($db->quoteName('civicrm_contribution'));
$query->where($db->quoteName('contribution_page_id') . ' = '. $db->quote('1'));
$query->where($db->quoteName('currency') . ' = '. $db->quote('RUB'));
$db->setQuery($query);
$results = $db->loadResult();
echo $results;
?>;
答案 0 :(得分:0)
Joomla在查询中定义数据库表时使用前缀。您需要在表名之前使用#__
,如下所示:
$query->from($db->quoteName('#__civicrm_contribution'));
答案 1 :(得分:0)
您的查询应使用sum()
函数:
$query->select('sum('.$db->quoteName('total_amount').')');
$query->from($db->quoteName('civicrm_contribution'));
$query->where($db->quoteName('contribution_page_id') . ' = '. $db->quote('1'));
$query->where($db->quoteName('currency') . ' = '. $db->quote('RUB'));
如果你想要一个包含每种货币总和的表(每行一个),你可以使用sql的group by
子句:
$query->select($db->quoteName('currency'));
$query->select('sum('.$db->quoteName('total_amount').')');
$query->from($db->quoteName('civicrm_contribution'));
$query->where($db->quoteName('contribution_page_id') . ' = '. $db->quote('1'));
$query->where($db->quoteName('currency') . ' = '. $db->quote('RUB'));
$query->group($db->quoteName('currency'));