【问题标题】:Return FieldValue Where FieldName Equals Value and ID Equals Number返回字段值,其中字段名称等于值且 ID 等于数字
【发布时间】:2018-12-14 20:07:22
【问题描述】:

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

我想要完成的是: 在表 submit_values 中 - 如果 FieldName 等于 CDR-Number、501c3 和 amount - 返回 FormId 等于 18 的每个 SubmissionId 的每个 FieldName 的 FieldValue。 我当前的代码:

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

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

【问题讨论】:

    标签: sql joomla


    【解决方案1】:

    我建议先旋转您的表格,然后将其连接成一个单列结果集。

    我也认为没有令人信服的理由加入 #__rsform_submissions,因此我已将其从我的 sn-p 中删除。

    代码:(本地测试)

    $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 问题。

    【讨论】:

    • 查询完全符合我的要求。但是,我在尝试在下拉选择 > 选项中捕获数组时遇到问题。
    • 我可以通过删除回显来添加结果 / 尝试添加以下内容:$results = $db->loadColumn(); $项目= $结果; $items[] = "| - 选择慈善详情 - [c]";感谢您的帮助,非常感谢!我希望这对其他人也有帮助。我看到了类似的帖子,但不清楚他们如何将结果呈现到下拉列表中,我的尝试没有成功。
    猜你喜欢
    • 1970-01-01
    • 2019-09-26
    • 2012-07-11
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2012-02-21
    相关资源
    最近更新 更多