2

我的国家表有这些列:rank_id 和 country_name。

现在它是按名称排序的,但我试图将一些特定国家按其排名顺序放在列表的顶部,然后其余的按名称排序。

这是我的查询:

foreach ($db->query("SELECT * FROM " . config_item('cart', 'table_countries') . "") as $row)
$countries[] = $row;

有任何想法吗?

4

3 回答 3

1

您可以通过添加以下内容来调整“ORDER BY”子句:

ORDER BY country_name='USA' DESC, country_name='Canada' DESC, country_name ASC

由于“country_name='USA'”仅对美国返回“true”(或 1),对所有其他国家/地区返回“false”(或 0),并且按降序排列,因此 USA 将是第一个,然后是加拿大,然后所有其他人都会来!

于 2012-11-22T21:57:26.950 回答
1

如果您添加一个rank_order默认值为 的列0,然后将其更改为您希望在列表顶部的几个特定国家/地区的更高数字。

然后,您可以使用此查询来获取您的数据:

SELECT * FROM table_countries ORDER BY rank_order DESC, country_name

按等级排序的行将始终排在第一位(按降序排列),因为它们rank_order高于0. 其余的将按字母顺序排列country_name

于 2012-11-22T22:05:19.650 回答
0

实现此目的的一种简单方法是在其中包含一个数字display_ordercountry_name,允许您通过使用名称进行排序来覆盖优先级设置。

这将允许您根据需要任意将国家/地区移至列表顶部,而无需在以后更改查询。

然后,您可以执行以下操作:

  SELECT *
  FROM country_name
  ORDER BY display_order ASC, name ASC;
于 2012-11-22T21:56:31.277 回答