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语句。然后在上面点餐。