如何从 Joomla 的组件菜单项中获取 MySQL 查询结果并使用 foreach where 子句进行优化?
Posted
技术标签:
【中文标题】如何从 Joomla 的组件菜单项中获取 MySQL 查询结果并使用 foreach where 子句进行优化?【英文标题】:How do I get MySQL query results from component menu item in Joomla and refine with a foreach where clause? 【发布时间】:2017-05-05 16:57:02 【问题描述】:我有自定义组件 J 2.5。在这个组件的菜单中,我也有 sql 字段:
<field
name="title"
type="sql"
default="10"
label="აირჩიეთ კატეგორია"
multiple="multiple"
query="SELECT id AS value, title FROM #__deals_categories"
/>
我正在从函数中获取数据并将其存储在$category
数组中:
$dealsparam = JFactory::getApplication()->getParams();
$category = $dealsparam->get(title, 10);
$category 的输出是数组:
Array ( [0] => 20 [1] => 23 [2] => 33 [3] => 41 [4] => 49 )
这些是来自数据库的类别 ID。 另外,我有一个从这些类别中获取内容的功能。当我有一个类别 ID 时一切正常,但是当我有多个类别 ID 例如:2、4、5 等时,我无法从 mysql 获取数据。我尝试 foreach 一个 where 子句,但有一些我无法理解的错误。
在下文中,我试图 foreach 一个 where 子句并从许多不同的类别中获取数据:
if ($category)
print_r ($category);
foreach ($category as $cat)
$query->where('d.category_id = ' . (int) $cat);
echo $cat.'<br>';
【问题讨论】:
【参考方案1】:您应该使用IN
而不是=
条件-
$category = (array) $category;
jimport('joomla.utilities.arrayhelper');
JArrayHelper::toInteger($category);
if(!empty($category))
$query->where('d.category_id IN(' . implode(',', $category) . ')');
【讨论】:
<?php // $category output is 23 when I echo $category; and there is no records ->where('d.category_id = ' . (int) $category) // also this method not work ->where('d.category_id = ' . $category) // but this method works ->where('d.category_id = 23') ?>
@Gocha :不确定出了什么问题,但可能会更新代码会有所帮助。
@Gocha:为该问题创建另一个问题。【参考方案2】:
您对'$query->where' 语句所做的是将'AND' SQL 条件添加到查询中。因此,如果一个项目只属于一个类别,则没有项目匹配。 你有两个选择: 1- Irfan 所说:使用 IN(category1, category2, ...) 2- 使用 'OR' 组成查询:
(d.category_id = category1) OR (d.category_id = category2) ...
【讨论】:
以上是关于如何从 Joomla 的组件菜单项中获取 MySQL 查询结果并使用 foreach where 子句进行优化?的主要内容,如果未能解决你的问题,请参考以下文章