gpt4 book ai didi

php - MySQL:在获取的列表中突出一些结果,例如第一个

转载 作者:行者123 更新时间:2023-11-29 06:17:21 25 4
gpt4 key购买 nike

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

我的字段是id, country_code, country_name

当前查询:

 SELECT * FROM countries ORDER BY country_name ASC

List 是标准的 HTML 选择/选项列表,我需要像第一个选项一样显示(按国家/地区代码)UKUSCA在列表中,然后是 A-Z 中的其他国家/地区。

谢谢!

最佳答案

ORDER BY 子句可以包含任意表达式 - 它不必限于列名。您可以在 ORDER BY 中使用 IN () 将低值 (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

这是一个简短的演示:http://sqlfiddle.com/#!9/2d0cc/1

如果您需要在突出显示的集合上指定额外的排序(例如强制 UK 排在第一位),可以通过向表中添加另一列来提供排序首选项来完成而不是依赖字母顺序排序。首先为您想要的值分配较低的值,非突出显示的值可能会保持 NULL

code, name,          sort
UK, United Kingdom, 1
CA, Canada, 2
FR, France NULL
RU, Russia NULL
US, United States 3

然后将该列添加到 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

不过,如果您可以接受在突出显示的行中按字母顺序排列,则可以避免所有这些额外的复杂性。

关于php - MySQL:在获取的列表中突出一些结果,例如第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com