Php SQL-按状态排序

Php SQL-按状态排序,php,mysql,sql,Php,Mysql,Sql,我编写了用于排序的sql,但我想添加第一个odreding子句,该子句按活动/非活动状态(第一个活动状态,而不是非活动状态)排序 我的代码: public function getUsers() { $sql = "SELECT * FROM user WHERE roles::text NOT LIKE '%ADMIN%' AND status != 'DELETED' ORDER BY first_

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

我的代码:

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';
我想把它添加到订单中,但我不知道如何安装


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

只需按
状态添加第二级排序:

ORDER BY
    status,
    first_name;
这应该是可行的,因为
ACTIVE
按字母顺序在
INACTIVE
之前。在MySQL上执行此操作的更安全的方法是按
字段
排序:

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

这将把active置于inactive之前,后跟所有其他状态值,包括null、last。

您可以在ORDER by子句中指定多个表达式,用逗号分隔

就你而言:

SELECT * FROM user 
            WHERE roles::text NOT LIKE '%ADMIN%' 
            AND status != 'DELETED'
            ORDER BY status ASC, first_name ASC;

这是通过首先按状态字段对所有结果行进行排序,然后按名字对它们进行排序来实现的。

假设您的代码是PHP,您可以定义一个状态变量,并在sql查询中以参数化方式使用它:

$status=status\u变量
$sql=“从用户选择*
其中角色::文本与“%ADMIN%”不同

和状态!=“已删除”


按名字排序,”$状态。“ASC;”

因为
A
I
之前,所以您只需按状态、名字进行排序即可。如果您获得更多的状态,例如
PENDING
,它们应该介于两者之间,您可以使用
FIELD()
按自定义顺序对其进行排序。