如何始终使用orderby始终检索记录并其余记录?

时间:2018-08-20 19:08:16

标签: sql eloquent sql-order-by laravel-4.2

我是Laravel的新手。 我正在尝试从数据库中检索一些记录。我需要其中一行始终位于第一位,并按字母顺序排列。就像这样:

CategoryID     Category
---------------------------
54            New Products
1             Amino Acids
3             b---
34            c----
4             d---

我应该如何重写代码来实现这一目标?

$db_categories = Category::get();

谢谢。

2 个答案:

答案 0 :(得分:1)

我不了解Laravel,但是-当您使用SQL-ish标签标记问题时,您可以使用CASE(或类似的功能,在您使用的数据库中可用;例如Oracle中的DECODE)。例如:

  • 我想先设置DEPTNO = 30(部门编号)
  • 其余应按DNAME(部门名称)的字母顺序排序

SQL> select * from dept
  2  order by case when deptno = 30 then 1
  3                else 2
  4           end,
  5           dname;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        30 SALES          CHICAGO
        10 ACCOUNTING     NEW YORK
        40 OPERATIONS     BOSTON
        20 RESEARCH       DALLAS

SQL>

希望您可以在这种情况下使用类似的东西。

答案 1 :(得分:1)

您可以使用此:

Category::orderBy(DB::raw("IF(category = 'New Products', 0, 1), Category"))->get();