Mysql:在ORDER BY旁边的结果数组之上移动特定记录

时间:2012-08-10 13:57:12

标签: php mysql

在mysql db表中我有所有国家/地区:

countries_table

我把所有国家都取为:

SELECT * FROM countries_table ORDER BY country_name

但我想在列表顶部显示一些特定的国家/地区:

Specific Countries

然后其他人会进入 ORDER BY country_name

可以通过 MYSQL 和/或 PHP &如何?

4 个答案:

答案 0 :(得分:6)

有一个简单且不为人知的MySQL技巧:

SELECT * FROM countries_table
ORDER BY name = 'Australia' desc,
         name = 'UAE' desc,
         name = 'Pakistan' desc,
         name = 'UK' desc,
         name = 'USA' desc,
         name asc;

答案 1 :(得分:1)

使用FIELD

SELECT country_id, country_name 
FROM countries_table 
    ORDER BY 
FIELD(country_name, 'USA', 'UK', 'Pakistan', 'UAE', 'Australia') DESC,
country_name ASC

已编辑:感谢comment mvf

答案 2 :(得分:0)

这应该有效:

SELECT country_id,
     country_name
FROM countries_table
ORDER BY (CASE country_name WHEN 'Australia' THEN '1'
                            WHEN 'UAE' THEN '2' 
                            ...
                            ELSE country_name 
          END) ASC;

答案 3 :(得分:0)

另一种方法,使用UNION

(SELECT * FROM countries_table
WHERE name IN('Australia', 'UAE', 'Pakistan', 'UK', 'USA')
ORDER BY name ASC)
UNION
(SELECT * FROM countries_table
WHERE name NOT IN('Australia', 'UAE', 'Pakistan', 'UK', 'USA')
ORDER BY name ASC)

文档:UNION