База данных 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) к запросу. Может кто-нибудь, пожалуйста, скажите мне, как это сделать? Благодаря
Ответы
Ответ 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);
Подробнее
Ответ 2
Это также должно работать:
$query->setLimit(1);
Документация: http://api.joomla.org/cms-3/classes/JDatabaseQueryLimitable.html
Ответ 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();