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(LIMIT 1)を追加する方法がわかりません。誰かがそれを行う方法を教えてもらえますか?ありがとう

4

4 に答える 4

45

Joomla3.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つのパラメーターを取ります。最初のものはクエリ、次に開始、次に制限です。上記のようにレコードを制限できます。

Joomla3.0より新しい

setLimit(integer $limit, integer $offset)

1行だけが必要な場合

$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

Joomla 3.4.x では SetLimit が機能しないので、次のことを試してください。

モデル内:

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

Davids の回答: 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 を呼び出すと、状態の現在の設定を返す前に populateState が呼び出されることが確認されます。

于 2015-09-23T13:21:46.223 に答える
2

更新:この回答を再確認する 必要がありましたが、以下のように使用すると、両方の方法setLimitと機能していることを確認できます。order

$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 に答える