Sql 如何在Laravel中的其他两个联接表上按日期列排序表?
我有以下表格:Sql 如何在Laravel中的其他两个联接表上按日期列排序表?,sql,laravel,postgresql,eloquent,sql-order-by,Sql,Laravel,Postgresql,Eloquent,Sql Order By,我有以下表格: table_1 id | table_2_id | table_3_id | table_1_specific_columns 1 | null | 1 | 2 | 1 | null | ... 以及: 以及: 数据库是PostgreSQL 如何在Laravel中按表2和表3上的日期列对表1进行排序 这可以用雄辩的语言来完成吗 编辑:如果可以使用Elounce完成,则预期结果是表
table_1
id | table_2_id | table_3_id | table_1_specific_columns
1 | null | 1 |
2 | 1 | null |
...
以及:
以及:
数据库是PostgreSQL
如何在Laravel中按表2和表3上的日期列对表1进行排序
这可以用雄辩的语言来完成吗
编辑:如果可以使用Elounce完成,则预期结果是表1模型的集合,表2和表3的关系由表2和表3中的日期列排序
编辑2:
表1的asc排序的预期结果。添加日期列是为了快速参考,不是必需的
id | table_2_id | table_3_id | date
1 | null | 2 | 02-02-1989
2 | 1 | null | 01-01-1990
1 | null | 1 | 01-01-1991
2 | 2 | null | 02-02-1992
您好,您可以使用语法
因此,您的代码将类似于:
Table::orderByRaw("column DESC, column2 ASC")->get();
从您共享的内容来看,您可能有表2或表3关系(如果有),因此您可以:
DB::table('table_1')
->leftJoin('table_2', 'table_1.table_2_id','table_2.id')
->leftJoin('table_3', 'table_1.table_3_id','table_3.id')
->select('table_1.*')
->orderByRaw('COALESCE(table_2.date, table_3.date)');
注:如果一行同时与表2和表3相关,则顺序仅由表2给出
这里的缺点是,您还将包括与任何内容都不相关的表1
的任何行。您可以通过添加->whereNotNull('table_2.id')->或whereNotNull('table_3.id')
如果您有一个模型,您可以修改上面的内容,例如使用
Table1::leftJoin….
而不是使用DB::table
,在这种情况下select('table_1.*)
变得更加重要,不要在模型对象中添加错误的值同时指定预期结果。@jarlh添加了预期结果Specify,没有描述。@jarlh在排序后添加了结果的具体示例
Table::orderByRaw("column DESC, column2 ASC")->get();
DB::table('table_1')
->leftJoin('table_2', 'table_1.table_2_id','table_2.id')
->leftJoin('table_3', 'table_1.table_3_id','table_3.id')
->select('table_1.*')
->orderByRaw('COALESCE(table_2.date, table_3.date)');