21

我想使用 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)添加到查询中。有人可以告诉我该怎么做吗?谢谢

4

4 回答 4

45

早于 Joomla 3.0

$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 个参数。第一个是查询,然后是开始,然后是限制。我们可以限制记录如上所示。

比 Joomla 3.0 更新

setLimit(integer $limit, integer $offset)

如果你只想要一排

$query->setLimit(1);

阅读更多

于 2012-10-07T13:33:25.093 回答
4

这也应该有效:

$query->setLimit(1);

文档:http ://api.joomla.org/cms-3/classes/JDatabaseQueryLimitable.html

于 2013-09-27T12:34:07.900 回答
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;
}

戴维斯回答:https ://joomla.stackexchange.com/questions/4249/model-getlistquery-fetch-all-rows-with-using-jpagination

在模型调用 getItems 之前运行它,它将为您加载所有项目。

对此有一些警告。

您也可以在模型之外执行此操作,例如,如果您在您的视图中。您可以执行以下操作:

$model = $this->getModel(); $model->setState('list.limit', 0);

有时您可以在模型状态填充之前过早执行此操作,这将导致模型在您设置限制后从用户状态重新构建,基本上会覆盖限制。

要解决此问题,您可以强制模型首先填充其状态:

$model = $this->getModel(); $model->getState(); $model->setState('list.limit', 0); 实际的 populateState 方法是受保护的,所以在模型之外你不能直接调用它,但是任何对 getState 的调用都会确保在返回 state 中的当前设置之前调用 populateState。

于 2015-09-23T13:21:46.223 回答
2

更新:只需重新访问这个答案,我可以确认, 如果使用如下方法,这两种方法都可以正常工作setLimitorder

$query->order($db->qn($data->sort_column_name) . ' ' . $data->sort_column_order);
$query->setLimit($length,$start);

旧答案

截至 2014 年 9 月 8 日,@Dasun 或 @escopecz 的解决方案在 J3.x 上不适合我

但这个老把戏对我有用,这很好,

  $query->order($db->qn('id') . ' DESC LIMIT 25');

关于您希望仅获取 1 行的具体要求,您可以使用:

  $rows = $db->loadObject();
于 2014-09-08T10:39:32.100 回答