Yii2基础版中如何正确筛选2017年9月之后的groupsavingdetails记录
解决Yii2中获取2017年9月后记录的查询问题
嘿,我来帮你搞定这个查询问题!首先咱们得先弄明白你原来的SQL为啥不对——你写的Year>=2017 and Month>9会把2018年1月、3月的记录过滤掉,因为这两条的Month是1和3,都不满足Month>9的条件,哪怕Year是2018也不行。咱们要的是2017年9月之后的所有记录,逻辑应该是:要么年份大于2017,要么年份等于2017且月份大于9。
正确的SQL语句
直接修正SQL条件就行,用OR来组合两种情况:
SELECT * FROM groupsavingdetails WHERE GroupId=29 AND (Year > 2017 OR (Year = 2017 AND Month > 9))
这样就能包含2017年10-12月,以及2018年所有月份的记录,正好是你要的5条。
Yii2中的两种实现方式
因为你用的是Yii2基础版,这里给你两种常用的写法:
1. ActiveRecord查询(推荐,符合Yii2的ORM规范)
假设你已经生成了对应的模型Groupsavingdetails,可以这样写:
use app\models\Groupsavingdetails; $records = Groupsavingdetails::find() ->where(['GroupId' => 29]) ->andWhere(['or', ['>', 'Year', 2017], ['and', ['=', 'Year', 2017], ['>', 'Month', 9]] ]) ->all();
2. 原生SQL查询(用createCommand)
如果更习惯写原生SQL,也可以用Yii的数据库组件执行:
use Yii; $connection = Yii::$app->db; $records = $connection->createCommand(' SELECT * FROM groupsavingdetails WHERE GroupId=29 AND (Year > 2017 OR (Year = 2017 AND Month > 9)) ')->queryAll();
这样调整后,就能正确获取到你需要的5条记录啦!
内容的提问来源于stack exchange,提问作者Questions
相关产品推荐
相关产品推荐

