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

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

07.10.2012 04:04:04 Просмотров 43 Источник

Я хочу построить следующий запрос, используя встроенный класс базы данных 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();

Я не знаю, как добавить предел (предел 1) к запросу. Может кто-нибудь сказать мне, как это сделать? Спасибо

У вопроса есть решение - Посмотреть?

Ответы - База данных Joomla-как использовать LIMIT в getQuery? / Joomla Database - How to use LIMIT in getQuery?

Является ответом!
Techie

07.10.2012 05:33:25

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

Читать дальше

https://stackoverflow.com/questions/12768647/joomla-database-how-to-use-limit-in-getquery/12769295#comment37333579_12769295
это странно (я постараюсь выяснить, почему) более старый метод работает с J3. 3.1, но более новый метод этого не делает.
https://stackoverflow.com/questions/12768647/joomla-database-how-to-use-limit-in-getquery/12769295#comment38659872_12769295
Krzysztof Jarosz - у меня также есть та же проблема setLimit (), не работающая с Joomla 3.3.2.
John Linhart

27.09.2013 04:34:07

Это тоже должно сработать:

$query->setLimit(1);

Документация: http://api.joomla.org/cms-3/classes/JDatabaseQueryLimitable.html

https://stackoverflow.com/questions/12768647/joomla-database-how-to-use-limit-in-getquery/19050895#comment28682269_19050895
начиная с Joomla 3.0 (платформа 12.1)
Mohd Abdul Mujib

08.09.2014 02:39:32

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

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

СТАРЫЙ ОТВЕТ

По состоянию на 08 / Sept / 14 решения от @Dasun или @escopecz не работают для меня на J3.икс

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

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

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

  $rows = $db->loadObject();
https://stackoverflow.com/questions/12768647/joomla-database-how-to-use-limit-in-getquery/25722370#comment100958794_25722370
@mickmackusa я абсолютно согласен правильного использования следует, только, что в то время (почти 5 лет назад), я не смог использовать методы и был очень расстроен, и, наконец, открывая обходной путь, я просто разместил его здесь в надежде, может быть, это может помочь кому-то в аналогичной ситуации.
Dennis Heiden

23.09.2015 04:21:46

SetLimit не работает для меня в Joomla 3.4.х, так что попробуйте:

В модели:

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 = $этом->getModel(); $модель->выполнении функция setState('список.предел', 0);

Иногда вы можете сделать это слишком рано, до того, как состояние модели будет изменено. заполняется, что приведет к тому, что модель будет перестроена от пользователя состояние после того, как вы установили предел, в основном переопределяя предел.

Чтобы исправить это, вы можете заставить модель сначала заполнить свое состояние:

$model = $this - >getModel (); $model - > > getState(); $model - >setState ('list.limit', 0); фактическим методом populateState является защищенный, поэтому вне модели вы не можете вызвать его напрямую, но любой вызов getState будет убедиться, что populateState вызывается перед возвратом текущих настроек в состояние.

Закрыть X