Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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_Select - Fatal编程技术网

Mysql 按区域设置然后按语言选择?

Mysql 按区域设置然后按语言选择?,mysql,sql,select,Mysql,Sql,Select,两张表: a id b id a_id url 表b中的URL具有如下模式: .../en-us/... .../en-gb/... .../de-at/... .../de-de/... .../ja-jp/... 查询: SELECT b.url FROM a JOIN b ON b.a_id = a.id 如果en-us不存在,我如何进一步缩小这些结果的范围,首先选择url,如%/en-us/%,然后选择%/en-%/%?换句话说,如果我有两个URL,一个用于en-u

两张表:

a
  id
b
  id
  a_id
  url
表b中的URL具有如下模式:

.../en-us/...
.../en-gb/...
.../de-at/...
.../de-de/...
.../ja-jp/...
查询:

SELECT b.url
FROM a
JOIN b ON b.a_id = a.id

如果en-us不存在,我如何进一步缩小这些结果的范围,首先选择url,如
%/en-us/%
,然后选择
%/en-%/%
?换句话说,如果我有两个URL,一个用于en-us,另一个用于en-gb,我如何将en-us“优先”于en-gb,并且只显示其中一个或另一个?

您可以使用
大小写表达式和一系列条件创建自定义排序顺序:

SELECT   b.url
FROM     a
JOIN     b ON b.a_id = a.id
ORDER BY CASE WHEN b.url LIKE '%/en-us/%' THEN 0
              WHEN b.url LIKE '%/en-gb/%' THEN 1
              WHEN b.url LIKE '%/en-%/%'  THEN 2
              ELSE                             3
         END

大小写
表达式与
排序依据一起使用

SELECT b.url
FROM a
INNER JOIN b
    ON a.id = b.a_id
ORDER BY
    CASE WHEN b.url LIKE '%/en-us/%' THEN 0 ELSE 1 END;
如果您确实只想显示一种URL类型,那么您可能需要一个
WHERE
子句,类似于:

WHERE b.url LIKE '%/en-us/%`

WHERE
子句-->中使用
IF
语句-->我认为您需要一个排名表来根据自定义业务逻辑为URL分配排名。在你的URL上获得排名,然后尝试按照RANKHow的顺序进行排序。这样做有效吗?我第一次看到这一点,我的很多问题都有了解决办法。@RhythemAggarwal你到底在问什么?订单?
case
表达式?完全正确。我总是在绝对列上使用ORDERBY子句。或者,如果要这样做,我会在select语句中编写case语句。然后在上面点餐。