You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:47:16