mysql - 根据列值在 Laravel 中自定义排序
问题描述
我想对表格条目进行排序。这是雄辩的模型。
namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Story
...
* @property string $due_date
* @property string $status late|scheduled|completed
...
*/
class Story extends Model {
...
}
我要返回故事的顺序是:
- “迟到”是 ASC(老年人优先)
- DSC 中的“预定” (新的优先)
- 在 DSC 中“完成” (新的第一)
所以让我们假设每个状态类型的故事在 db 中有 15 个条目。并且分页限制设置为 20。
所以这是每个页面的响应
- 第一页:按 ASC 顺序排列的 15 个后期故事 + 按 DSC 顺序排列的前 5 个预定故事
- 第二页:剩余 10 个预定故事 + 前 10 个已完成故事(按 DSC 顺序)
- 第三页:剩余 5 个已完成的故事
如果上面提供的信息不充分,请告诉我。谢谢!
解决方案
不理想,但没有factor
列可以工作:
Story::orderByRaw('FIELD(status, "late", "scheduled", "completed")')
->orderByRaw('(CASE WHEN status = "late" THEN 1 ELSE -1 END) * due_date')
->paginate(10);
乘以整数时,due_date
自动转换为字符串 ( 20180609
)。所以它应该比timestamp(due_date)
.
推荐阅读
- sql-server - SQL Server 大容量复制动态脚本
- python - Python:当 Pandas Dataframe 为空时的 Lambda if else 语句
- jinja2 - 无法使用 jython pip 安装 jinja2?
- javascript - 无法解构 'auditlogs' 的属性 'executor',因为它未定义。discord.js 频道更新事件
- r - ggplot2中具有多个分组的有序条形图
- python - Python:如何从数组中删除值
- c# - gridview 行数不等于 gridview DataSource 行数
- google-chrome - 剪贴板在 Chrome 之外监听?
- maven - 是否有从 maven pom 中删除旧依赖项的最佳实践?
- css - 为什么让我的轮播变窄会在幻灯片之间产生故障过渡?