- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 CSqlDataProvider
的非常复杂的查询,我试图让分页 totalItemCount
工作,但它返回了错误的计数。我试图创建第二个 SQL 来计算项目,但这真的很难,有人可以帮助我吗?
CSqlDataProvider 文档:http://www.yiiframework.com/doc/api/1.1/CSqlDataProvider
Controller 代码:
$dayofweek = date('w');
$sql = "( SELECT `profile`.`id` as profile_id, `profile`.`name` as profile_name, `events_reminder`.`id`,
CASE WHEN weekday >= $dayofweek
THEN
DATE_FORMAT( CONCAT( DATE_ADD(CURDATE(), INTERVAL weekday - $dayofweek DAY), ' ', event_time ), '%d/%m/%Y %H:%i')
ELSE
DATE_FORMAT( CONCAT( DATE_ADD(CURDATE(), INTERVAL 7 - $dayofweek + weekday DAY), ' ', event_time ), '%d/%m/%Y %H:%i')
END as revent_datetime,
CASE WHEN weekday >= $dayofweek
THEN
DATE_FORMAT( CONCAT( DATE_ADD(CURDATE(), INTERVAL weekday - $dayofweek DAY), ' ', list_time ), '%d/%m/%Y %H:%i')
ELSE
DATE_FORMAT( CONCAT( DATE_ADD(CURDATE(), INTERVAL 7 - $dayofweek + weekday DAY), ' ', list_time ), '%d/%m/%Y %H:%i')
END as rlist_datetime
FROM events_reminder
LEFT OUTER JOIN `profiles` `profile` ON (`events_reminder`.`profile_id`=`profile`.`id`)
HAVING revent_datetime NOT IN (SELECT DATE_FORMAT(event_datetime, '%d/%m/%Y %H:%i') FROM events WHERE `events`.`profile_id`=`events_reminder`.`profile_id`) )
UNION ALL
( SELECT `profile`.`id` as profile_id, `profile`.`name` as profile_name, `events_reminder`.`id`,
CASE WHEN weekday >= $dayofweek
THEN
DATE_FORMAT( CONCAT( DATE_ADD(CURDATE(), INTERVAL weekday - $dayofweek + 7 DAY), ' ', event_time ), '%d/%m/%Y %H:%i')
ELSE
DATE_FORMAT( CONCAT( DATE_ADD(CURDATE(), INTERVAL 7 - $dayofweek + weekday + 7 DAY), ' ', event_time ), '%d/%m/%Y %H:%i')
END as revent_datetime,
CASE WHEN weekday >= $dayofweek
THEN
DATE_FORMAT( CONCAT( DATE_ADD(CURDATE(), INTERVAL weekday - $dayofweek + 7 DAY), ' ', list_time ), '%d/%m/%Y %H:%i')
ELSE
DATE_FORMAT( CONCAT( DATE_ADD(CURDATE(), INTERVAL 7 - $dayofweek + weekday + 7 DAY), ' ', list_time ), '%d/%m/%Y %H:%i')
END as rlist_datetime
FROM events_reminder
LEFT OUTER JOIN `profiles` `profile` ON (`events_reminder`.`profile_id`=`profile`.`id`)
HAVING revent_datetime NOT IN (SELECT DATE_FORMAT(event_datetime, '%d/%m/%Y %H:%i') FROM events WHERE `events`.`profile_id`=`events_reminder`.`profile_id`) )
ORDER BY revent_datetime";
$count=Yii::app()->db->createCommand($sql)->queryScalar();
$dataProvider=new CSqlDataProvider($sql, array(
'totalItemCount'=>$count,
));
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
最佳答案
什么 queryScalar
做的是:
Executes the SQL statement and returns the value of the first column in the first row of data.
因此,要使用它来获取 count
,您必须将 count(*)
添加到您的 sql 查询中,这也在查询的开头,如下所示:
SELECT count(*), `profile`.`id` as profile_id, `profile`.`name` ...
更新:
由于您使用的是 UNION
,因此您必须将 count(*)
移到外面,同时提供一个别名:
SELECT count(*) from (((select ...) UNION ALL (select ...)) as alias)
根据您的具体情况,您可以:
$count_sql='SELECT count(*) from (('. $sql .') as alias)';
$count=Yii::app()->db->createCommand($count_sql)->queryScalar();
关于php - CSqlDataProvider 复杂查询和 totalItemCount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14513549/
我有一个使用 CSqlDataProvider 的非常复杂的查询,我试图让分页 totalItemCount 工作,但它返回了错误的计数。我试图创建第二个 SQL 来计算项目,但这真的很难,有人可以帮
有没有办法限制 CSqlDataProvider?例如,当我将 totalItemCount 强制设置为 3 时,不会考虑结果。 $count=Yii::app()->db->createComman
我需要从名为 Hospitals 的表中获取具有相同条件的一些记录: 首先获取与 $city 参数匹配的城市。其次获取状态与 $state 参数匹配的那些。第三把剩下的按A-Z排序 我需要在一个查询中
我正在使用 CSqlDataProvider 构建 CGridview 我不能使用 CActiveRecord,因为结果集很大并且会引发内存错误。列需要可排序。我该如何实现? 示例 SQL $orde
我试图在使用 yii 的以下 sql 语句中得到很少的结果,但是有一些错误....!!! $sql="SET @pStat=-1; SET @pdt=0; SELECT * FROM (SELEC
我在 CGridView 中使用的代码在 $data->gen_id 和 $data->erc_gen 的列值中为我提供了一个空值,当我使用浏览器检查器进行检查时,它给了我 ercgen/admin
我是一名优秀的程序员,十分优秀!