我有一个SQL表来翻译我的网站,如下所示:
翻译
我试图为用户提供自定义翻译,用户可以在其中设置一个或多个标签 所以他会有类似的东西:
我想从TRANSLATE中选择全部,其中Languague =" English"
然后从TRANSLATE中选择全部,其中Languague =" EnglishCustom"
仅为姓名专栏做联盟。因此,如果我们有一个相同的名称(这里:lbl_name),我会优先使用EnglishCustom来获得" N4M3"而不是" name"。
我只想了解我们如何做一个:如果我们有2个相同的Label,那么用户在这个标签上添加了一个trad,所以在EnglishCustom上获取Translate而不是在英语上,使用SQL请求
你能帮帮我吗?谢谢答案 0 :(得分:2)
试试这个:
select id,Label,Translate,Languague
from
(select id,Label,Translate,Languague,ROW_NUMBER() over (partition by id,label order by languague desc) rn
from TRANSLATE
where Languague in('English','EnglishCustom')) a
where a.rn =1
<强>输出:强>
id Label Translate Languague
1 lbl_name n4m3 EnglishCustom
答案 1 :(得分:0)
SELECT TOP 1 * FROM
(
SELECT * , 1 as Seq
FROM TRANSLATE where Languague = "EnglishCustom"
UNION ALL
SELECT * ,2 as Seq
FROM TRANSLATE where Languague = "English"
) AS myTab
ORDER BY Seq
答案 2 :(得分:0)
如果您的查询准备就绪,只需要返回正确的值,您可能需要查看coalesce()
让我们假设这个查询(仅针对eyplain,可能不起作用):
SELECT COALESCE(t2.TRANSLATE,t1.TRANSLATE)
FROM TRANSLATE t1
LEFT JOIN TRANSLATE t2
ON t1.label = t2.label
AND t2.Languague = CONCAT (t1.Languague,'Custom')
WHERE t1.Languague = 'English'
COALESCE将返回第一个非空值。 如果LEFT JOIN未加入任何自定义名称,则将返回默认值。
在这个Pastebin中,我使用MySQL表进行了快速测试,该表也适用于你。