Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP选择下拉选项通过mysql将特定选项置于顶部_Php_Mysql_Sql Order By_Selection - Fatal编程技术网

PHP选择下拉选项通过mysql将特定选项置于顶部

PHP选择下拉选项通过mysql将特定选项置于顶部,php,mysql,sql-order-by,selection,Php,Mysql,Sql Order By,Selection,My country表有以下列:rank_id和country_name 现在它是按名称排序的,但我试着把一些特定的国家按其排名顺序排在列表的首位,然后通过名称将其他国家排在后面 我的问题是: foreach ($db->query("SELECT * FROM " . config_item('cart', 'table_countries') . "") as $row) $countries[] = $row; 有什么想法吗?实现这一点的简单方法是在country\u name中包

My country表有以下列:rank_id和country_name

现在它是按名称排序的,但我试着把一些特定的国家按其排名顺序排在列表的首位,然后通过名称将其他国家排在后面

我的问题是:

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

有什么想法吗?

实现这一点的简单方法是在
country\u name
中包含一个数字
display\u order
列,允许您通过使用name进行排序来覆盖优先级设置

这将允许您根据您的需要任意将国家移动到列表的顶部,而无需在以后更改查询

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

  SELECT *
  FROM country_name
  ORDER BY display_order ASC, name ASC;
您可以通过添加以下内容来调整“ORDER BY”子句:

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

由于“country_name='USA'”仅对美国返回“true”(或1),而对所有其他国家返回“false”(或0),并且按降序排列,因此美国将是第一位的,加拿大也是第一位的,然后所有其他国家都会出现

如果您添加一个默认值为
0
rank\u order
列,然后将其更改为更高的数字,以显示您希望位于列表顶部的几个特定国家

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

从表中选择*国家/地区按等级顺序描述,国家/地区名称

要按秩排序的行总是排在第一位(降序排列),因为它们的
rank\u顺序
高于
0
。其余的将按字母顺序排列,按国家名称

排列顺序是rand\u id是“排名顺序”还是主键?我猜他的意思是“排名顺序”是
rand\u id
列。我的看法是,你应该有第三列,名为
rank\u order
,然后按名称排序。