我需要完成mysql_query,选择多个选项并在网页上发布结果。表单(Breezingforms)提取数据。
Joomla模块将出现在网页上
<div id="frmSrchResults"></div>使用用户选择从db中提取数据的窗体上的“搜索”按钮
function ff_Searchbutton_action(element, action)
{
switch (action) {
case 'click':
let var1 = ff_getElementByName('category').value;
let var2 = ff_getElementByName('subcategory').value;
let var3 = ff_getElementByName('CselCountry').value;
// call the .post
jQuery.ajaxSetup({async:false});
jQuery.post(
'<?php return JUri::root(true); ?>/index.php', {
option: 'com_breezingforms',
ff_form: ff_processor.form,
format: 'html',
category: var1,
subcategory: var2,
country: var3
},
// success: function(data) {
function(data) {
jQuery('#frmSrchResults').html(data);
);
break;
default:;
} // switch
} // ff_Searchbutton_action以表格形式出现-在表格之前
$this->execPieceByName('ff_InitLib');
// fetch .post() parameters
$var1 = JRequest::getVar('par1');
$var2 = JRequest::getVar('par2');
if ($var1 && $var2 && $var1 !== '' && $var2 !== '') {
$db = JFactory::getDBO();
$db->setQuery("Query I need to complete");
$result = $db->loadAssocList();
// clean output buffer
while (@ob_get_level() > 0) { @ob_end_clean(); }
echo $result;
exit;
}这是数据库结构的一个示例。
id title name value
4 Company Name companyname Microsoft
4 Company Address companyaddress someaddress
4 Country country USA
4 Category category Computer
4 Sub-category subcategory Software
5 Company Name companyname Apple
5 Company Address companyaddress someaddress2
5 Country country CANADA
5 Category category Business
5 Sub-category subcategory Executive
6 Company Name companyname Ollivetti
6 Company Address companyaddress someaddress3
6 Country country CANADA
6 Category category Business
6 Sub-category subcategory Executive例如,用户在表单中的输入:
Category=Business
Sub-category=Executive
Country=CANADA现在我需要:选择值(根据用户在表单上的选择)。每个表单元素都是一个表中的选择列表),因此在我的示例中,预期结果如下所示:
Company Name Company Address
Apple someaddress2
Ollivetti someaddress3 发布于 2019-02-09 06:44:10
我将假设您正在运行一个过时版本的Joomla,因为从Joomla3.x开始,JRequest就被否决了。 & JRequest::getVar(),所以您应该尽快升级。
现代句法:
$jinput = JFactory::getApplication()->input;
$category = $jinput->get->post('par1', '', 'WORD');
$subcategory = $jinput->get->post('par2', '', 'WORD');
$country = $jinput->get->post('par3', '', 'WORD');然后你可以这样写你的条件:
if ($category && $subcategory && $country) {您的查询将需要使用"pivot";下面是我在Joomla Stack Exchange上发布的一个解决方案,它实现了一个支点对关联行进行分组。
SQL搜索Business和Executive:(db-小提琴演示)
SELECT
MAX(CASE WHEN `name` = 'companyname' THEN `value` ELSE NULL END) AS `Company Name`,
MAX(CASE WHEN `name` = 'companyaddress' THEN `value` ELSE NULL END) AS `Company Address`
FROM `ucm`
GROUP BY `id`
HAVING
MAX(CASE WHEN `name` = 'category' THEN `value` ELSE NULL END) = 'Business'
AND MAX(CASE WHEN `name` = 'subcategory' THEN `value` ELSE NULL END) = 'Executive'
AND MAX(CASE WHEN `name` = 'country' THEN `value` ELSE NULL END) = 'CANADA'
ORDER BY `Company Name`;使用输入变量将此原始SQL转换为Joomla-method语法,它可以如下所示:
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select([
"MAX("
. "CASE WHEN name = " . $db->q("companyname")
. " THEN value ELSE NULL END"
. ") AS " . $db->qn("Company Name"),
"MAX("
. "CASE WHEN name = " . $db->q("companyaddress")
. " THEN value ELSE NULL END"
. ") AS " . $db->qn("Company Address")
])
->from($db->qn("#__your_ucm_table"))
->group("id")
->having([
"MAX("
. "CASE WHEN name = " . $db->q("category")
. " THEN value ELSE NULL END"
. ") = " . $db->q($category),
"MAX("
. "CASE WHEN name = " . $db->q("subcategory")
. " THEN value ELSE NULL END"
. ") = " . $db->q($subcategory),
"MAX("
. "CASE WHEN name = " . $db->q("country")
. " THEN value ELSE NULL END"
. ") = " . $db->q($country)
])
->order($db->qn("Company Name"));
try
{
$db->setQuery($query);
if (!$results = $db->loadAssocList())
{
echo "No matches found";
}
else
{
echo "<table>";
echo "<tr><th>", implode("</th><th>", array_keys($results[0])), "</th></tr>";
foreach ($results as $row)
{
echo "<tr><td>", implode("</td><td>", $row), "</td></tr>";
}
echo "</table>";
}
}
catch (Exception $e)
{
JFactory::getApplication()->enqueueMessage("<div>Query Syntax Error, ask dev to run diagnostics</div>", 'error');
// Don't show the following details to the public:
//echo $query->dump();
//echo $e->getMessage();
}附注:请记住,不能简单地echo您的loadAssocList数据。
至于jquery,我相信您错过了调用的success块。
success: function (data) {
jQuery('#frmSrchResults').html(data);
},
error: function (xhr, status) {
console.log("Bonk! Time to debug.");
}https://stackoverflow.com/questions/54601980
复制相似问题