MySql:按特定条件排序2列

时间:2017-03-01 05:50:14

标签: mysql sql sorting

我有以下列的社区表,如下所示:

enter image description here

我需要按照“ ftr_order ”和“ isFeatured ”列对表格进行排序,以便按以下顺序显示数据:

ftr_order | isFeatured

   2      |   yes
   1      |   no
   2      |   no
   3      |   no
   4      |   no
   5      |   no
   6      |   no
   0      |   no
   NULL   |   no
   NULL   |   no
   NULL   |   no

ftr_order 应按升序对数据进行排序。 0和NULL值应该位于表的底部。 我尝试了以下查询,这在一定程度上解决了它,但我需要设置优先级,即

i) 优先级 :如果 isFeatured ,则将其显示在顶部。

ii) 第二优先级 :按升序排序 ftr_order

** 注意:如果 ftr_order 0 NULL ,则在底部显示数据。

SELECT * FROM community ORDER BY if(ftr_order = 0 or ftr_order is null,1,0), ftr_order ASC, community_description ASC

这将显示以下输出:

enter image description here

您可以在此处看到 ftr_order 已正确整理,但此处缺少一件事, ID 数字7应该列在表格顶部作为此行列 isFeatured ='是'。为了将这一行放在顶部,我试着通过写下查询来解决它:

SELECT * FROM community ORDER BY if(ftr_order = 0 or ftr_order is null,1,0 or isFeatured='yes'), ftr_order ASC, community_description ASC

您可以看到生成了以下输出,您还可以分析仍然存在的问题。 ID 号码7应列在表格顶部,但此处 ID 号码7列在表格底部。 因此我需要将它移到顶部。请帮我解决这个问题。提前谢谢!

enter image description here

2 个答案:

答案 0 :(得分:0)

SELECT * FROM community ORDER BY isfeatured desc,ftr_order ASC,community_description ASC

如果isfeatured只有yes / no,那么你可以尝试这样做

答案 1 :(得分:0)

最后我回答了自己的问题,解决方案如下:

SELECT * from (SELECT * FROM `community` ORDER BY if( ftr_order =0 OR ftr_order IS NULL , 1, 0 ) , ftr_order ASC , community_description ASC) as community ORDER BY CASE WHEN isFeatured ='yes' then isFeatured END desc

将生成以下输出:

enter image description here

此处 isFeatured ='是'位于顶部,其余数据按ftr_order升序排序,其中NULL和0将结束。

ftr_order | isFeatured

   2      |   yes
   1      |   no
   2      |   no
   3      |   no
   4      |   no
   5      |   no
   6      |   no
   0      |   no
   NULL   |   no
   NULL   |   no
   NULL   |   no