Joomla数据库 - 如何在getQuery中使用LIMIT?

时间:2012-10-07 12:04:04

标签: mysql joomla joomla2.5 joomla3.0 joomla3.1

我想使用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 个答案:

答案 0 :(得分:43)

比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);

Read more

答案 1 :(得分:4)

这也应该有效:

$query->setLimit(1);

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

答案 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;
}

戴维斯回答: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(); $模型 - >的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();