代码之家  ›  专栏  ›  技术社区  ›  animuson

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

  •  0
  • animuson  · 技术社区  · 15 年前

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

    SELECT * FROM `global_flags` ORDER BY `country`
    

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

    2 回复  |  直到 15 年前
        1
  •  9
  •   VeeArr    15 年前

    使用A CASE 你的表情 ORDER BY 子句,并将特定值赋给要首先出现的国家。

    例如

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

    如果不能从列本身推测顺序(在您的情况下,我认为您不能),则需要将另一列添加到表中(或通过视图添加),以提供排序顺序。

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

    SELECT * FROM global_flags ORDER BY priority DESC, country
    

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

    编辑:我的方法有一个缺点,那就是你在向数据中添加UI内容。您可以将优先级(一个UI对象)划分到自己的表中,并且 INNER JOIN 或者创建一个视图。但也许 VeeArr's answer 更好的是:它不会因用户界面问题而污染您的数据。