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 问题。
我正在使用数据库查询在 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 问题。