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

mysql - MySql:按某些条件对2列进行排序-LMLPHP

我需要以某种方式按“ 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为yes,则将其显示在顶部。

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


这将显示以下输出:

mysql - MySql:按某些条件对2列进行排序-LMLPHP

在这里,您可以看到ftr_order的排序正确,但这里缺少一件事,ID号7应该列在表的顶部,因为该行的isFeatured ='yes'列。为了使该行位于顶部,我尝试通过写下查询来解决该问题:

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在表格的底部列出。
因此,我需要将其移到顶部。请帮助我解决此问题。提前致谢!

mysql - MySql:按某些条件对2列进行排序-LMLPHP

最佳答案

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

如果isfeatured仅是/否,可以尝试这样

08-27 18:10