两个表:
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并仅显示一个或另一个?
答案 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/%`