首页 > 解决方案 > SQL - 按状态排序

问题描述

我编写了用于排序的 sql,但我想添加第一个 odreding 子句是 ACTIVE/INACTIVE 状态(首先是活动而不是非活动)。

我的代码:

public function getUsers()
{
    $sql = "SELECT * FROM user 
            WHERE roles::text NOT LIKE '%ADMIN%' 
            AND status != 'DELETED'
            ORDER BY first_name ASC;";
    return $this->getEntityManager()->getConnection()->query($sql)->fetchAll();
}

我必须常数

const STATUS_ACTIVE = 'ACTIVE';
const STATUS_INACTIVE = 'INACTIVE';
const STATUS_INVITED = 'INVITED';
const STATUS_DELETED = 'DELETED';

我希望将其添加到 ORDER BY 但我不知道如何适合它们。

我是 sql 的新手。有人可以帮忙吗?

标签: phpmysqlsql

解决方案


只需添加第二个排序级别status

ORDER BY
    status,
    first_name;

这应该有效,因为ACTIVE按字母顺序排列在INACTIVE. 在 MySQL 上执行此操作的一种更安全的方法是通过以下方式订购FIELD

ORDER BY
    FIELD(status, 'INACTIVE', 'ACTIVE') DESC,
    first_name

这会将活动置于非活动之前,然后是所有其他状态值,包括 null,最后。


推荐阅读