使用一个MySQL查询将特定结果带到前面

时间:2010-06-05 16:39:27

标签: php mysql

我正在设置我的地理位置功能,该功能按名称顺序列出了所有国家/地区。但是,大多数网站都设置了热门国家(如美国,英国,加拿大,澳大利亚)位于列表的前面(首先显示而不是在指定位置)。是否可以使用我已经运行的相同MySQL查询来实现这一点?

SELECT * FROM `global_flags` ORDER BY `country`

某处有更好的选择吗?也许在可以查询数据库之后可以重新组织结果的东西?我不想排除这些结果,然后在开头手动输入它们,因为这会浪费文件中的更多空间。

2 个答案:

答案 0 :(得分:9)

ORDER BY子句中使用CASE表达式,并为要首先显示的国家/地区指定特定值。

e.g。

SELECT * FROM global_flags
  ORDER BY (CASE WHEN country="United States" THEN 0 WHEN country="United Kingdom" THEN 1 ELSE 2 END), country;

答案 1 :(得分:2)

如果订单无法从列本身推测出来(在您认为不可能的情况下),您需要在表中添加另一列(或通过视图添加)提供排序顺序。

例如,您可以拥有int类型的优先级列。对于大多数行而言,它是空的,对于那些你想要的人,它可能是1.假设你想要美国和英国作为你的第一行,其余的按字母顺序排列:

SELECT * FROM global_flags ORDER BY priority DESC, country

会将优先级较高的项目推送到结果集的顶部。具有相同优先级的项目将按字母顺序排序。

编辑:我的方法是你在向数据中添加UI内容。您始终可以将优先级(UI事物)分离到其自己的表中,并将其INNER JOIN分隔或创建视图。但也许VeeArr's answer可能更好:它不会因UI问题而污染您的数据。