有没有办法在特定记录中将MYSQL使用的默认顺序设置为NULL。
我的桌子:
id state
1 downloading
2 NULL
3 error
4 finish
5 downloading
6 NULL
7 NULL
8 fail
9 finish
10 error
我希望NULL介于'下载'和'错误'并且不显示'完成','失败'。 (在MYSQL中查询之后)我希望结果如下:
id state
1 downloading
5 downloading
2 NULL
6 NULL
7 NULL
3 error
10 error
我的疑问:(不工作)
SELECT * FROM `report_table`
WHERE
state NOT IN ('finish','fail')
ORDER BY
case
when state= 'downloading' then 1
when state IS NULL then 2
when state= 'error' then 3
else 6
end, state ASC , id ASC
LIMIT 1
答案 0 :(得分:1)
通常,SQL允许您对所需的任何表达式进行ORDER BY。这不是仅提供列名称的必要条件。因此,您可以设计表达式,根据需要订购数据。假设我们选择“下载”和“错误”之间的魔术值“dzzzzz”。然后写下
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="myUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/YourDatasource</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
但要小心 - MySQL在这些方面并不是很有效。
答案 1 :(得分:0)
您可以执行以下操作:
SELECT * FROM `table`
ORDER BY
FIELD(IFNULL(state, 'null'), 'downloading', 'null', 'error', 'fail', 'finish');
在这种情况下,我们使用FIELD
函数 - https://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_field
答案 2 :(得分:0)
您可以在CASE
子句中使用ORDER BY
表达式:
SELECT id, state
FROM mytable
ORDER BY CASE WHEN state = 'downloading' THEN 'aa'
WHEN state IS NULL THEN 'ab'
ELSE state
END, id
这种方式首先是'downloading'
条记录,然后是NULL
条记录,其次是其他记录。
答案 3 :(得分:0)
这应该可以,因为您可以为所需的案例分配自定义顺序,其余的将默认排序。
order by
case
when state= 'downloading' then 1
when state IS NULL then 2
when state= 'error' then 3
when state= 'fail' then 4
when state= 'finish' then 5
else 6
end