Sorting 最后为空的原则orderBy

Sorting 最后为空的原则orderBy,sorting,null,doctrine,Sorting,Null,Doctrine,我有一个表,其中有我必须排序的项目,其中有些项目有状态。我需要的是: 按状态“排序”值对项目进行排序(ASC) 按时间戳(DESC)对项目进行排序 对所有项目进行排序,以便所有无状态的项目都是最后一个,但也按时间戳排序 以下是我所拥有的: $query->leftJoin('c', 'Statuses', 'st', 'st.id = c.status') ->addSelect('CASE WHEN c.status IS NULL THEN 1 ELSE 0 END as

我有一个表,其中有我必须排序的项目,其中有些项目有状态。我需要的是:

  • 按状态“排序”值对项目进行排序(ASC)
  • 按时间戳(DESC)对项目进行排序
  • 对所有项目进行排序,以便所有无状态的项目都是最后一个,但也按时间戳排序
  • 以下是我所拥有的:

    $query->leftJoin('c', 'Statuses', 'st', 'st.id = c.status')
        ->addSelect('CASE WHEN c.status IS NULL THEN 1 ELSE 0 END as HIDDEN status_is_null')
        ->orderBy('status_is_null', 'asc')
        ->addOrderBy('st.sort', 'asc')
        ->addOrderBy('c.timestamp', 'desc');
    
    但它抛出了一个错误:

    执行“SELECT c.id时发生异常,如果c.status为NULL,则1 ELSE 0结束为隐藏状态,其中c.active=?”项中的c为NULL?ORDER BY status_为_null asc,c.timestamp desc LIMIT 10 OFFSET 0'带参数[true]:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解可在第1行中使用的“status_is_null FROM Items c,其中c.active='1'ORDER BY'附近使用的正确语法


    我做错了什么?

    不确定,但我认为您需要在大小写之前和结尾之后添加开始括号和结束括号。不,仍然是一个例外我有一个简化的解决方案,它可以正常工作:
    $this->createQueryBuilder('a')->select('a.id,当a.field为NULL时为CASE,则1其他0结束为隐藏的h_field')->orderBy('h_field',asc')
    。您能否将您所做的其余工作发布到
    $query
    ?也许有什么东西破坏了你的代码。这是一个相当长的文件,有很多查询和排序选项。但它以$this->query->select('c.id')->from('Items','c');。我应该用你的例子来代替它吗?然后我会开始逐行删除,看看什么组合有效,然后修复其余部分。不确定,但我认为你需要在大小写之前和之后添加开始括号和结束括号。不,仍然是个例外我有一个简化的解决方案,效果很好:
    $this->createQueryBuilder('a')->select('a.id,如果a.field为NULL,则1或0结束为隐藏的h_字段')->orderBy('h_字段','asc')
    。你能将你所做的其余事情发布到
    $query
    ?可能有什么东西破坏了你的代码。这是一个相当长的文件,有很多查询和订单选项。但它从$this->query->->select('c.id')->from('Items',c')开始)我应该用你的例子来代替它吗?然后我会开始一行一行地删除,看看什么组合有效,然后修复其余的。