我的国家/地区表包含以下列:rank_id和country_name。
现在它按名称排序,但我试图按照排名顺序将一些特定国家放在列表的顶部,然后通过名称跟随其余国家。
这是我的疑问:
foreach ($db->query("SELECT * FROM " . config_item('cart', 'table_countries') . "") as $row)
$countries[] = $row;
有什么想法吗?
答案 0 :(得分:1)
如果您添加rank_order
列,其默认值为0
,然后将其更改为您希望位于列表顶部的少数特定国家/地区的更高数字。
然后,您可以使用此查询来获取数据:
SELECT * FROM table_countries ORDER BY rank_order DESC, country_name
按排名排序的行将始终排在第一位(按降序排列),因为他们的rank_order
高于0
。其余的将按country_name
按字母顺序排序。
答案 1 :(得分:0)
实现此目的的一种简单方法是在display_order
中包含一个数字country_name
列,允许您通过使用名称排序来覆盖优先级集。
这样您就可以根据需要随意将国家/地区移动到列表顶部,而无需在以后更改查询。
然后您可以执行以下操作:
SELECT *
FROM country_name
ORDER BY display_order ASC, name ASC;
答案 2 :(得分:0)
您可以通过添加以下内容来调整“ORDER BY”子句:
ORDER BY country_name='USA' DESC, country_name='Canada' DESC, country_name ASC
由于“country_name ='USA'”仅对美国返回“true”(或1),对所有其他国家/地区返回“false”(或0)且order by降序,USA将是第一个,然后是相同的加拿大,然后所有其他人都会来!