Return 字段名称等于值且 ID 等于数字的字段值

Return FieldValue Where FieldName Equals Value and ID Equals Number

我正在使用数据库查询在 Joomla 3x 中创建一个动态下拉列表,但我无法将结果分组到同一选项 (FieldValue - FieldValue - FieldValue) 中。每个结果 returns 作为自己的选项。

我想要完成的是: 在 table submission_values - 如果 FieldName 等于 CDR-Number、501c3 和金额 - return 每个 SubmissionId 的每个 FieldName 的 FieldValue,其中 FormId 等于 18。 我当前的代码:

//<code>
$items = array();
$db = JFactory::getDbo();
$items[] = "| - Select Charity Details - [c]";
$query = $db->getQuery(true);

$query
->select(array('a.FieldValue', 'a.FieldName', 'a.SubmissionId', 'a.FormId'))
->from($db->quoteName('#__rsform_submission_values', 'a'))
->join('INNER', $db->quoteName('#__rsform_submissions', 'b') . ' ON (' . $db->quoteName('a.SubmissionId') . ' = ' . $db->quoteName('b.SubmissionId') . ')')
->where($db->quoteName('a.FormID') . ' = 18 ')
->where($db->quoteName('a.FieldName') . ' IN ("amount" , "501c3", "CDR-Number")')
->order($db->quoteName('a.SubmissionId') . ' DESC');

$db->setQuery($query);

$query->dump();
$results = $db->loadObjectList();

foreach($results as $row) {
$value = $row->FieldValue; 
$label = $row->FieldValue; 
$items[] = $value.'|'.$label; 
}

return implode("\n", $items);
//</code>

Returns 6 个结果,而不是 2 个。

我需要结果 return CDR-001:One80 Place - $1,000.00 和 CDR-002:March of Dimes -$2,000.00

我会建议旋转你的 table 然后连接成一个单列结果集。

我也没有看到加入的令人信服的理由 #__rsform_submissions 所以我已将其从我的代码段中删除。

代码:(本地测试)

$db = JFactory::getDbo();
$query = $db->getQuery(true)
            ->select("CONCAT(
                        MAX(CASE WHEN FieldName = 'CDR-Number' THEN FieldValue ELSE NULL END),
                        ': ',
                        MAX(CASE WHEN FieldName = '501c3' THEN FieldValue ELSE NULL END),
                        ' - ',
                        MAX(CASE WHEN FieldName = 'amount' THEN FieldValue ELSE NULL END)
                      )")
            ->from("#__rsform_submission_values")
            ->where("FormID = 18")
            ->where("FieldName IN ('CDR-Number', '501c3', 'amount')")
            ->group("SubmissionId DESC");
// echo $query->dump();  // if you want to see the rendered query
$db->setQuery($query);
echo "<pre>";
try {
    var_export($db->loadColumn());
} catch (Exception $e) {
    JFactory::getApplication()->enqueueMessage("Select Query Syntax Error " . $e->getMessage(), 'error');
    // use $e->getMessage() only while debug and page is not viewable by public as a matter of security
}

输出:

array (
  0 => 'CDR-002: March of Dimes -,000.00',
  1 => 'CDR-001: One80 Place - ,000.00',
)

这是最近在 JoomlaStackExchange 上的回答,其中我 suggest/explain 枢轴技术:https://joomla.stackexchange.com/a/23921/12352

如果您 post 在 JoomlaStackExchange 上提出您的问题,我会更快找到它并且昨天就可以将这个解决方案提供给您。以后请 post 你的 Joomla 问题。