图像表有字段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/