3

簡単なクエリを実行するとします。

$products = 
 Yii::app()->db->createCommand()->setFetchMode(PDO::FETCH_OBJ)
  ->select('*')
  ->from('products')
  ->limit(9)
  ->queryAll();

データベースに 500 個の製品があるとします。「制限」が含まれている場合、YII が製品の総数 (カウント) を自動的に返すようにする方法はありますか? おそらく、次のようなオブジェクトを返します。

$products->products = array( ... products ... )
$products->totalProducts = 500;

問題は、LIMIT が含まれている場合、アイテムが返されるため、カウントが 9 になることです。9 個のアイテムを返すだけでなく、200 個のアイテムがある場合は 200 個のアイテムのカウントも返すソリューションが必要です。

4

6 に答える 6

4

簡単ではない理由:

$сount = Yii::app()->db->createCommand('select count(*) from table')->queryScalar();
echo $count;
于 2015-01-30T04:19:25.977 に答える
2

2つのクエリ(制限なしのcount(*)クエリ、次に制限付きクエリ)を実行する必要があります。または、CSqlDataProviderを使用して製品を取得し、それを実行させることができます。ただし、通常は2つのクエリが必要です。

注: Yii 1.1.13の優れた機能の1つはCSqlDataProvider、データプロバイダーを使用する場合にクエリビルダーコマンドをに送信できることです。それを修正したこのプルリクエストの詳細については、をご覧ください。そうすれば、クエリビルダーの機能を使用しながら、データをデータプロバイダーにシフトすることもできます。以前は、SQLステートメントを手動で作成するか、コマンドのqueryTextを取得する必要がありました。

于 2013-03-08T04:14:20.587 に答える
2
Yii::app()->db->createCommand('select count(*) from tbl_table')->queryScalar();
于 2013-03-08T08:22:14.160 に答える
0

execute()は行数を返すため、 query( )の代わりにexecute()を使用してみてください。例:

$rowCount = $command->execute();
于 2013-03-08T08:53:35.260 に答える
-1

これを試して -

$sql = Yii::app()->db->createCommand('select * from tbl_table')->queryAll(); //It's return the Array

echo count($sql); //Now using count() method we can count the array.
于 2014-12-11T10:33:16.317 に答える
-1

次のように COUNT を使用してみてください。

$dbCommand = Yii::app()->db->createCommand("
SELECT COUNT(*) as count FROM `products`");
$data = $dbCommand->queryAll();

それが役立つことを願っています!

編集:これも役立つかもしれません: CDataProvider

于 2013-03-07T21:20:41.487 に答える