按地区选择,然后按语言选择?

时间:2018-07-31 16:21:37

标签: mysql sql select

两个表:

a
  id
b
  id
  a_id
  url

表b中的网址具有以下格式:

.../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/%之类的网址,然后再选择%/en-%/%之类的网址(如果en-us不存在)?换句话说,如果我有两个网址,一个用于en-us和en-gb,我如何才能优先于en-us而不是en-gb并仅显示一个或另一个?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

CASE表达式与ORDER BY一起使用:

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/%`