我有以下列的社区表,如下所示:
我需要按照“ 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
这将显示以下输出:
您可以在此处看到 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列在表格底部。 因此我需要将它移到顶部。请帮我解决这个问题。提前谢谢!
答案 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
将生成以下输出:
此处 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