返回FieldValue,其中FieldName等于值,ID等于数字

时间:2018-12-14 20:07:23

标签: sql joomla

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

我要完成的是: 在表内部commit_values中-如果FieldName等于CDR-Number,501c3和数量-对于FormId等于18的每个SubmissionId,返回每个FieldName的FieldValue。 table to query 我当前的代码:

//<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>

返回6个结果,而不是2个。 Dropdown Results

我需要返回CDR-001:One80位-$ 1,000.00和CDR-002:三月一毛钱-$ 2,000.00的结果

1 个答案:

答案 0 :(得分:1)

我建议旋转您的表,然后将其串联成一个单列结果集。

我也没有令人信服的理由加入#__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 -$2,000.00',
  1 => 'CDR-001: One80 Place - $1,000.00',
)

以下是JoomlaStackExchange的最新答案,我在其中建议/解释了枢轴技术:https://joomla.stackexchange.com/a/23921/12352

如果您将您的问题发布在JoomlaStackExchange上,我会早点找到它的,并且可以在昨天向您提供此解决方案。以后,请在此处发布您的Joomla问题。