因 MySql 5.7 不支持窗口函数 row_number, rank, dense_rank, ntile 等都是窗口函数 所以生成自增序号时无法使用以上函数 只能通过 @row_number+ 或子查询 实现
// 因 MySql 5.7 不支持窗口函数 row_number, rank, dense_rank, ntile 等都是窗口函数
// 所以生成自增序号时无法使用以上函数 只能通过 @row_number+ 或子查询 实现
// @row_number 示例
# 引入模型
$hisModel = new \app\admin\model\miniform\History();
# 模型变量初始化
$hisModel->execute("SET @row_number=0");
# 获取数据 自增序号
$list = $hisModel
->field("@row_number:=@row_number+1 AS row_num,id")
->where(['project_id'=>20])
->order('id desc')
->select();
// 子查询 示例
# 引入模型
$hisModel = new \app\admin\model\miniform\History();
# 定义查询条件
$his_where = ['project_id'=>20];
# 获取子查询语句
$sonQuery = $hisModel
->alias('son')
->field("COUNT(id)")
->where($his_where)
->where("son.id <= his.id")
->buildSql();
# 获取数据
$list = $hisModel
->alias('his')
->field("{$sonQuery} AS row_num,id,project_id,user_id")
->where($his_where)
->order('row_num asc')
// ->fetchSql(true) // 这个方法可查看当前执行的sql
->select();
参考文章: SQL生成序号的四种方式
参考文章: SELECT查询自动增加序号
百度关键字: Thinkphp sql 生成序号