Я собираюсь предположить, что вы используете устаревшую версию Joomla, потому что JRequest устарел с Joomla 3.x & Joomla 3.3 устаревшая функция для 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-fiddle demo )
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 с вашими входными переменными может выглядеть так:
$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();
}
ps Имейте в виду, что вы просто не можете echo
ваши loadAssocList
данные.
Что касается вашего jquery, я полагаю, что вам не хватает блока success
для вызова.
success: function (data) {
jQuery('#frmSrchResults').html(data);
},
error: function (xhr, status) {
console.log("Bonk! Time to debug.");
}
Вот некоторый контекст: https://stackoverflow.com/a/20008285/2943403