我想使用joomla内置数据库类构建以下查询。
SELECT *
FROM table_name
ORDER BY id DESC
LIMIT 1
这是我到目前为止所构建的查询。
$db =& JFactory::getDBO();
$query = $db->getQuery(true);
$query->select($db->nameQuote('*'));
$query->from($db->nameQuote(TABLE_PREFIX.'table_name'));
$db->setQuery($query);
$rows = $db->loadObjectList();
我不知道如何向查询添加限制(LIMIT 1)。有人可以告诉我怎么做吗?感谢
答案 0 :(得分:43)
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('*')
->from($db->nameQuote('#__table_name'))
->order($db->nameQuote('id').' desc');
$db->setQuery($query,0,1);
$rows = $db->loadObjectList();
$db->setQuery
函数有3个参数。第一个是查询,然后是开始,然后是限制。我们可以限制记录,如上所示。
setLimit(integer $limit, integer $offset)
如果你只想要一行
$query->setLimit(1);
答案 1 :(得分:4)
答案 2 :(得分:3)
SetLimit在Joomla 3.4.x中对我不起作用,所以试试:
在模型中:
protected function getListQuery()
{
// Create a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);
// Select some fields
$query->select('*');
$query->from('#__your_table');
$this->setState('list.limit', 0); // 0 = unlimited
return $query;
}
在模型调用getItems之前运行它,它将加载所有 物品给你。
有一些警告。
您也可以在模型外部执行此操作,因此,例如,如果您在 你的看法。您可以执行以下操作:
$ model = $ this-> getModel(); $ model-> setState('list.limit',0);
有时你可以在模型状态出现之前过早地做到这一点 填充,这将导致模型从用户重建 设置限制后的状态,基本上覆盖限制。
要解决此问题,您可以强制模型首先填充其状态:
$ model = $ this-> getModel(); $模型 - >的getState(); $ model-> setState('list.limit',0);实际的populateState方法是 保护,所以在模型之外你不能直接调用它,但任何 调用getState将确保调用populateState 在返回状态中的当前设置之前。
答案 3 :(得分:1)
截至08/9月14日@Dasun或@escopecz的解决方案在J3.x上不适用于我
但这个老技巧对我来说很好,
$query->order($db->qn('id') . ' DESC LIMIT 25');
关于您希望fetch only 1 row可以使用的具体要求:
$rows = $db->loadObject();