所以我在这张表中有一本手册:
id lang header_name text
1 uk Youth Development It's very important
2 dk tst hejsa
3 uk tst hello sir
我想创建一个查询来获取给定语言的所有手动条目(在本例中为丹麦语)。如果由于某种原因,并非所有100%的原始手册条目(英国的)已被翻译,我想要获得英语条目。甚至可以用这种表格格式吗?
我想这会是某种类型的“group by header_name”,但不确定。
答案 0 :(得分:1)
试试这个,我没有SQL,因此没有经过测试 表t1,t2,t3表示同一个表使用别名来区分它们;
select * from t3
where t3.lang IN ('DK','UK')
and t3.ID NOT IN
(select t1.id
FROM t1,t2
where t1.header_name = t2.header_name
AND t2.lang = 'DK'
AND t1.lang = 'UK'
)
基本上首先,您需要找到具有翻译的ID,然后将其排除。
答案 1 :(得分:1)
这可能会起作用,但它没有得到优化:
SELECT *
FROM the_table
WHERE lang = 'dk'
UNION
SELECT *
FROM the_table
WHERE lang <> 'dk' AND header_name NOT IN (
SELECT header_name
FROM the_table
WHERE lang = 'dk'
)
答案 2 :(得分:0)
我不能发表评论,但我想问的是: 在您刚刚提出的示例中,Id 2和ID 3的行只是不同语言的相同条目?
我说你把它拉出来制作两张桌子
Example
id
sort
(all other generic columns)
example_translations
id
example_id
language_id
header_name
text
然后,如果查询id为1的示例的丹麦语翻译,它将返回该实体的example_translations行。如果它什么都不返回,你可以查询英文版。
我不认为可以在Mysql级别上做这样的事情
答案 3 :(得分:0)
我理解这一点的方式,如果缺少丹麦语内容,您希望获得英语内容吗?您可能希望在表格中添加一列来标记您的条目。 (不知道你的“header_name”专栏是否对你有效,我猜这也将被翻译出来?...
无论如何,一个名为“entry_id”的列,其中“tst dk”和“tst uk”都有一个id为“2”的例子,你应该在加载时手动询问“entry_id”并首先查找dk条目,如果不存在,请加载英国条目。