从数据库中检索行总和

时间:2013-09-12 10:42:55

标签: php mysql sql database joomla

我使用下面的代码从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;
?>;

2 个答案:

答案 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'));