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

您要么必须运行两个查询(一个 count(*) 无限制查询,然后是有限查询),或者您可以发送您可以使用CSqlDataProvider检索您的产品并让它为您完成。但它通常需要两个查询。

注意:CSqlDataProvider Yii 1.1.13 的一个很好的特性是如果你要使用数据提供者,你可以发送你的查询构建器命令。有关修复它的这个拉取请求的更多信息。这样,您既可以使用查询构建器的强大功能,又可以将数据转移到数据提供者中。以前您必须手动构建 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

您可以尝试像这样使用 COUNT:

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

希望有帮助!

编辑:您可能会发现这也很有用:CDataProvider

于 2013-03-07T21:20:41.487 回答
-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 回答