我拥有从A-Z排序的世界上所有国家/地区的数据库,我的客户要求我选择几个国家,例如选项列表中的第一个。怎么做?
我的字段为id
,country_code
,country_name
Curret查询:
SELECT * FROM countries ORDER BY country_name ASC
列表是标准的HTML选择/选项列表,我需要显示(按country_code)UK
,US
,CA
,如列表中的第一个选项,然后是AZ的其他国家/地区。
谢谢!
答案 0 :(得分:2)
ORDER BY
子句可以包含任意表达式 - 它不必限于列名。您可以使用IN ()
内的ORDER BY
为要突出显示的值指定低值(0),为其余值指定更高的值(1)。按照您的排序顺序country_name ASC
进行操作,两个组都将按字母顺序排序。
这是有效的,因为0
列表中的IN ()
被分配给1
列表,而0
被分配给其余列表。 1
总是在SELECT *
FROM countries
ORDER BY
CASE
-- Assign lower sort values to the specified list
WHEN country_code IN ('UK','US','CA') THEN 0
-- And higher sort values to others
ELSE 1
END ASC,
-- Sub-sort by name
country_name ASC
之前排序。
UK
以下是一个简短的演示:http://sqlfiddle.com/#!9/2d0cc/1
如果您需要在突出显示的集合上指定其他排序(例如强制NULL
为第一个),可以通过向表中添加另一列来提供排序首选项而不是依赖按字母顺序排序。将较低的值分配给您想要的值,未突出显示的值可以保留code, name, sort
UK, United Kingdom, 1
CA, Canada, 2
FR, France NULL
RU, Russia NULL
US, United States 3
。
sort
然后将该列ORDER BY
添加到ORDER BY
CASE
WHEN country_code IN ('UK','US','CA') THEN 0
ELSE 1
END ASC,
-- Sub-sort by the new "sort" column to force ordering
sort ASC,
-- Finally sort alphabetically for all those without
-- specific sort values
country_name ASC
:
UICollectionView
如果您可以在突出显示的行中使用字母顺序,则可以避免所有这些额外的复杂性。