【问题标题】:Laravel 7 previous and next records with alphabetical orderLaravel 7 上一个和下一个按字母顺序排列的记录
【发布时间】:2021-11-25 09:53:30
【问题描述】:

在我的编辑表单中,我想添加一个按钮来保存和编辑以下用户。

我正在尝试“下一个”按钮按字母顺序将我带到下一个记录。

我只能通过 ID 订购

// In a model
public function next(){
  return User::where('id', '>', $this->id)->orderBy('nombre','asc')->first();
}
public  function previous(){
  return User::where('id', '<', $this->id)->orderBy('nombre','desc')->first();
}

【问题讨论】:

  • 全部排序并缓存在前端。数据库服务器再次点击并排序整个数据集只是为了获取下一个或上一个数据集的成本太高
  • 是否更改您的 where 子句以检查名称 > 当前记录的名称是您的编辑工作吗?

标签: php laravel routes laravel-7


【解决方案1】:

需要用到mysql的rank函数和raw query

以前的记录

\DB::select('SELECT * FROM (SELECT RANK() OVER (ORDER BY nombre ASC) ranking, users.* FROM `users`) user where ranking < {previous_record_rank} ORDER BY ranking asc limit 1;');

下一条记录

\DB::select('SELECT * FROM (SELECT RANK() OVER (ORDER BY nombre ASC) ranking, users.* FROM `users`) user where ranking > {previous_record_rank} ORDER BY ranking asc limit 1;');

你需要在config/database.php中将mysql.strict设置为false

或者

\DB::statement("SET SQL_MODE=''");

【讨论】:

  • 完美,我不知道这个功能“排名”谢谢!!
  • 我正在使用共享主机,并且没有工作语句语句语法错误或访问冲突:1064 您的 SQL 语法有错误对此有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2022-12-04
  • 2013-07-12
相关资源
最近更新 更多