2011-03-29 97 views
1

所以我在這臺手動:自定義排序+集團通過

id lang header_name  text   
1 uk  Youth Development It's very important 
2 dk  tst    hejsa 
3 uk  tst    hello sir 

而且我要特別強調獲取給定語言的所有手動輸入(丹麥在這種情況下)查詢。如果由於某種原因,並非全部原始手冊條目(英國條目)的全部都已被翻譯,我想要取得英文條目。這甚至可以用這種表格格式嗎?

我想這應該是某種類型的「group by header_name」,但不確定。

+0

你可以指定要輸出什麼? – 2011-03-29 11:28:23

+0

耶以上除了id 3因爲它已經在「dk」語言。 – 2011-03-29 11:29:08

+0

我的問題是,「order by」是在「group by」之後執行的,如果我想用這兩個函數來完成,可能是union和嵌入式查詢,但我不知道這是否有點矯枉過正。 (只是想讓我的php代碼更漂亮) – 2011-03-29 11:32:03

回答

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' 
) 

本質第一Y你需要找到有翻譯的ID,然後排除它們。

+0

是的,一個工作:)謝謝。 WHERE lang ='uk'和'header_name'不在(從userguide中選擇'header_name'其中lang ='dk' ) order by'header_name' – 2011-03-29 11:39:03

0

我不能評論,但我想問的是: 在你剛剛提出的例子中,Id 2和ID 3的行是相同的條目,只有不同的語言?

Id言你拉出來,使兩個表

Example 
id 
sort 
(all other generic columns) 

example_translations 
id 
example_id 
language_id 
header_name 
text 

那麼,如果查詢的例子與ID爲1的丹麥語翻譯,它會返回該實體的example_translations行。如果它沒有返回任何東西,你可以查詢英文版本。

我不認爲這是可以做到這樣的事情在MySQL水平

0

路上,我明白這一點,你想,如果缺少了丹麥的內容,以獲得英語內容?..你可能要添加一個列標記到您的表格中標記條目的位置。 (不知道如果你的「header_name」專欄爲你做到了這一點,我猜測,以及將被翻譯?..

無論如何,名爲「entry_id」的列,其中「tst dk」和「tst uk」舉例來說,你應該在id爲「2」的情況下,你應該在你加載手動的時候詢問「entry_id」並且首先尋找dk條目,如果它不在那裏,加載英國條目

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' 
)