mysql查询使用order by子句

时间:2014-04-21 02:54:51

标签: mysql sql

我的字段存储是/否值,名称为SelectionFavorite

我希望像

一样获取记录

首先包含SelectionFavorite值的所有记录和其他剩余记录

我做了一些像

这样的查询
SELECT p.Id,
       p.NameLatin,
       p.NameEnglish,
       cm.DescriptionEnglish,
       p.SelectionFavorite,
       p.SelectionGarden,
       p.SelectionPerso1,
       SelectionPerso2,
       SelectionPerso3
FROM plant p
INNER JOIN CategoryMain cm ON p.CategoryMain = cm.id
ORDER BY (p.SelectionFavorite=yes)

但是只返回那些具有“是”值的记录。

我想要这种类型的结果

  

Id NameLatin NameEnglish DescriptionEnglish SelectionFavorite .....

     

1 name1 eng1 desc1是是是否否

     

2 name2 eng2 desc2是是是否否

     

3 name3 eng3 desc3是是是否否

     

4 name4 eng4 desc4是是是否否

     

5 name5 eng5 desc5是是是否否

     

6 name6 eng6 desc1 no yes yes no no

     

7 name7 eng7 desc2 no yes yes no no

     

8 name8 eng8 desc3 no yes yes no no

     

9 name9 eng9 desc4 no yes yes no no

如何解决此问题?

2 个答案:

答案 0 :(得分:4)

将“是”值首先置于其他值之后的order by子句是:

ORDER BY (p.SelectionFavorite = 'yes') desc

您的查询不应该过滤掉任何内容,尽管它会将非yes值放在第一位。

答案 1 :(得分:2)

您可以使用这样的解决方案:

SELECT p.Id,
   p.NameLatin,
   p.NameEnglish,
   cm.DescriptionEnglish,
   p.SelectionFavorite,
   p.SelectionGarden,
   p.SelectionPerso1,
   SelectionPerso2,
   SelectionPerso3
FROM plant p
INNER JOIN CategoryMain cm ON p.CategoryMain = cm.id
ORDER BY CASE p.SelectionFavorite WHEN 'yes' THEN 1 ELSE  2 END;