Подтвердить что ты не робот

База данных Joomla - Как использовать LIMIT в getQuery?

Я хочу построить следующий запрос, используя встроенный класс базы данных 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) к запросу. Может кто-нибудь, пожалуйста, скажите мне, как это сделать? Благодаря

4b9b3361

Ответ 1

Старее, чем 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);

Подробнее

Ответ 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 перед возвратом текущих настроек в состояние.

Ответ 4

Обновление: Просто пришлось вернуться к этому ответу, и я могу подтвердить, оба метода setLimit & order работают, если используются как показано ниже.

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

СТАРЫЙ ОТВЕТ

С 08/14/14 Решения из @Dasun или @escopecz не работают для меня на J3.x

но этот старый трюк работает на меня, и это хорошо,

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

А что касается вашего конкретного требования: получить только 1 строку, которую вы можете использовать:

  $rows = $db->loadObject();