我有下表:
+------+---------+--------+
| lang | title | url |
+------+---------+--------+
| pt | Livro 1 | o294jl |
| en | Book 1 | o294jl |
| en | Book 2 | 7s621f |
+------+---------+--------+
当特定语言是系统语言时,我需要确定lang
的优先级。例如,假设我正在使用pt
语言,我需要一个返回以下内容的查询:
+------+---------+--------+
| lang | title | url |
+------+---------+--------+
| pt | Livro 1 | o294jl |
| en | Book 2 | 7s621f |
+------+---------+--------+
基本上,当使用title
时,我需要为lang
,GROUP BY url
等设置确定性值。当前,它基本上得到最低的id
作为值:
SELECT lang, title, url
FROM book
GROUP BY book.url
我尝试将ORDER BY
与CASE
子句一起使用,但是由于它在GROUP BY
操作之后运行,因此无法正常工作。我可以将GROUP_CONCAT
与IF
一起使用来选择正确的值,但是由于我的真实表有几列,所以看起来不太好。
谢谢。
答案 0 :(得分:-1)
对于您来说,如果您知道整个应用程序中只有两种类型的lang,它们就是“ pt”和“ en”。您可以使用order by lang desc
简单地扩展查询。
这里是样品
SELECT b.lang, b.title, b.url
FROM book b
GROUP BY b.lang,b.title,b.url
ORDER BY b.lang DESC
但是,如果将来您可能会使用更多类型的lang,并可能需要按特定的lang进行订购。我建议您再添加一个表来保存lang的优先级值。因此,您可以按优先级排序以获取应该首先出现的lang。
这里是样品
SELECT b.lang, b.title, b.url
FROM book b
INNER JOIN priority p ON p.lang = b.lang
ORDER BY p.order