php - 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 的新手。有人可以帮忙吗?
解决方案
只需添加第二个排序级别status
:
ORDER BY
status,
first_name;
这应该有效,因为ACTIVE
按字母顺序排列在INACTIVE
. 在 MySQL 上执行此操作的一种更安全的方法是通过以下方式订购FIELD
:
ORDER BY
FIELD(status, 'INACTIVE', 'ACTIVE') DESC,
first_name
这会将活动置于非活动之前,然后是所有其他状态值,包括 null,最后。
推荐阅读
- angular - 如何在ionic-4中设置默认登录页面和登录后打开选项卡
- laravel - data() 中的错误:“TypeError:无法获取未定义或空引用的属性‘问题’”
- java - 从 MySQL DB 中选择后的日期向后一天
- html - 更改特定 div 的视口宽度和高度
- javascript - 基于“getElementsByName”函数滚动到 React 中的元素
- r - 使用老鼠的插补在解析中显示错误
- python - python - 混淆“as”关键字在except语句中的工作方式
- angular - 访问从 URL 重定向到 Angular 应用程序的链接不起作用
- java - WARN TaskSetManager: Lost Task xxx: java.lang.ArrayIndexOutOfBoundsException: 1 - Scala
- javascript - 从集合中获取第一个元素并将其删除