mysql - 条件排序依据在两个字段上具有两种不同的排序

标签 mysql sql

图像表有字段sortkey,imageid

我希望当表的所有 sortkey 值都为 0 时,按图像 id 排序。并且当所有值都不为 0 时,按 sortkey 升序排序并且 imageid 在 sortkey 顺序之后.

我试过了

SELECT * FROM image 
WHERE 1=1  AND imageobjectid = 1 AND imagetype = 12 
ORDER BY CASE sortkey WHEN sortkey>0 THEN sortkey ELSE imageid END LIMIT 1;

SELECT * FROM image 
WHERE 1=1  AND imageobjectid = 1 AND imagetype = 12 ORDER BY 
(CASE sortkey WHEN sortkey>0 THEN sortkey END) ASC ,   
(CASE imageid WHEN !sortkey>0 THEN imageid END) DESC LIMIT 1;

但没有任何效果。 测试用例:

(imageid,sortkey) : 
1. (1,0) (2,0)(3,0) -> output (imageid): 3 , 
2. (1,0) (2,1) (3,0) -> output (imageid) : 1 , 
3. (1,2) (2,1) (3,0) -> output (imageid) : 3 

而且我不想使用子查询来做到这一点。可以使用子查询,但我正在寻找单个查询的解决方案。

最佳答案

试试这个:

SELECT * FROM image    ORDER BY 
if( (SELECT count(image.sortkey ) FROM image WHERE image.sortkey != 0 ) >= 1 ,imageid,sortkey) ASC

关于mysql - 条件排序依据在两个字段上具有两种不同的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49443557/

相关文章:

java - 使用 Spring Boot 测试 OneToMany 与 Postman 的关系时出错

sql - 如何使用时间戳进行查询?

mysql - CONCAT 与 IF ELSE 一起?

sql - 是否可以将 LIMIT 应用于分组结果,但仍获取所有行?

sql - 如何扫描表格的每一行,并根据前一行更新当前行?

php - 连接到 SQL 主机时出错,PHP 脚本 : PHPVALLEY Microjob Script

mysql - 具有全文搜索功能的海量数据库 - Sphinx、Lucene、Cassandra、MongoDB、CouchDB

java - 再次调用同一页面不会将数据添加到数据库

mysql - 根据另一个表字段对一个表字段求和

sql - 为什么我可以在子查询中使用来自不同表的列?