Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
Mysql 将某些值排序到顶部_Mysql_Sql Order By - Fatal编程技术网

Mysql 将某些值排序到顶部

Mysql 将某些值排序到顶部,mysql,sql-order-by,Mysql,Sql Order By,我有一个MySQL表,其中包含以下数据(简化): 现在,我希望能够得到一个以客户所在国家开始的、带页码的商店列表 例如,美国客户将看到以下列表: Foo Baz Bar Foo2 Baz2 Bar3 我现在正在使用的简单解决方案(例如一位美国客户,页面大小为3): 有没有更好的方法?是否可以使用ORDER BY并告知将某个值放在顶部?您必须将一个国家的每个值与一个数字链接,并使用一个案例: select * from stores order by case when country = "u

我有一个MySQL表,其中包含以下数据(简化):

现在,我希望能够得到一个以客户所在国家开始的、带页码的商店列表

例如,美国客户将看到以下列表:

Foo
Baz
Bar
Foo2
Baz2
Bar3
我现在正在使用的简单解决方案(例如一位美国客户,页面大小为3):


有没有更好的方法?是否可以使用ORDER BY并告知将某个值放在顶部?

您必须将一个国家的每个值与一个数字链接,并使用一个案例:

select *
from stores
order by case when country = "us" then 1
              else 0
         end desc

创建一个国家代码和订单表,在查询中加入该表,然后按国家代码的订单排序

所以你会有一张看起来像

CountryOrder

Code  Ord
----  ---
us    1
jp    2
se    3
然后是如下代码:

SELECT s.*
FROM Stores s
INNER JOIN CountryOrder c
   ON c.Code = s.Country
ORDER BY c.Ord;

使用
IF
将最大值分配给US行如何

select if(country_cd='us,'aaaUS',country_cd) sort_country_cd, country_cd from stores Order by sort_country_cd
这将为您提供一个名为
sort\u country\u cd
的伪列。 在这里,您可以将“我们”映射到“aaaUS”。
JP
仍然可以映射到
JP

这将我们列在您的排序列表的顶部。

试试以下方法:

SELECT * FROM stores ORDER BY country = "us" DESC,  storeId

要首先获取搜索到的国家,然后按字母顺序获取其余国家:

SELECT * 
FROM   stores 
ORDER BY country = 'us' DESC, country ASC

根据IF(国家/地区代码('CA','US'),0,1),国家/地区名称从国家/地区订单中选择国家/地区代码、国家/地区名称
SELECT * FROM stores ORDER BY country = "us" DESC,  storeId
SELECT * 
FROM   stores 
ORDER BY country = 'us' DESC, country ASC