自定义订单按+分组

时间:2011-03-29 11:25:09

标签: mysql group-by sql-order-by

所以我在这张表中有一本手册:

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”,但不确定。

4 个答案:

答案 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条目,如果不存在,请加载英国条目。