两个字段上的两个不同排序的条件顺序

时间:2018-03-23 06:22:02

标签: mysql sql

图片表包含字段sortkey ,imageid

当表的所有排序键值都小于order by image id.并且所有值都不是order by sortkey ascending和sortid排序后的imageid时,我希望这样。

我试过

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 

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

3 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

SELECT * FROM image order by sortkey asc,imageid asc;

这将以Sortkey顺序排序记录,然后按图像id顺序排序,如果sortkey全部为零,那么它将自动转为按图像顺序排序

答案 2 :(得分:0)

除非你使用窗口函数,否则我认为你可以在没有某种子查询的情况下完成这个任务。

select
    case when max(sortkey) = 0 then max(imageid) else
        (select min(imageid) from image i2 where i2.sortkey = min(i.sortkey))
    end as imageid
from image i