假设我做了一个简单的查询:
$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项的计数。
答案 0 :(得分:3)
为什么不轻松:
$сount = Yii::app()->db->createCommand('select count(*) from table')->queryScalar();
echo $count;
答案 1 :(得分:2)
您要么必须运行两个查询(没有限制的计数(*)查询,然后是有限的查询),或者您可以发送给您使用CSqlDataProvider检索您的产品并让它为您执行。但它通常需要两个查询。
注意: Yii 1.1.13中的一个非常好的功能是,如果您要使用数据提供者,可以将查询构建器命令发送到CSqlDataProvider
。有关this pull request that fixed it的更多信息。这样,您既可以使用查询构建器的强大功能,也可以将数据转移到数据提供程序中。以前,您必须手动构建SQL语句或获取命令的queryText。
答案 2 :(得分:2)
Yii::app()->db->createCommand('select count(*) from tbl_table')->queryScalar();
答案 3 :(得分:0)
尝试使用 execute()而不是 query(),因为execute会返回rows count。 例如:
$rowCount = $command->execute();
答案 4 :(得分:-1)
您可以尝试使用COUNT:
$dbCommand = Yii::app()->db->createCommand("
SELECT COUNT(*) as count FROM `products`");
$data = $dbCommand->queryAll();
希望有所帮助!
编辑:您可能会发现这也很有用:CDataProvider
答案 5 :(得分:-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.