MySQL:Hilight几乎没有像获取列表中的第一个结果

时间:2016-01-30 22:56:39

标签: php mysql

我拥有从A-Z排序的世界上所有国家/地区的数据库,我的客户要求我选择几个国家,例如选项列表中的第一个。怎么做?

我的字段为idcountry_codecountry_name

Curret查询:

 SELECT * FROM countries ORDER BY country_name ASC

列表是标准的HTML选择/选项列表,我需要显示(按country_code)UKUSCA,如列表中的第一个选项,然后是AZ的其他国家/地区。

谢谢!

1 个答案:

答案 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

如果您可以在突出显示的行中使用字母顺序,则可以避免所有这些额外的复杂性。