2011-04-06 93 views
0

我有一個語言實體,用於存儲文本和它所使用的語言代碼。我需要獲取用戶所選語言的所有文本列表,除非該語言沒有特定的文本行,在這種情況下,我需要獲取英文版本。如何用這個做謂詞?

我的表是基本上是這樣的,在SQL方面:

DECLARE TABLE Languages 
(
    textId int, 
    languageCode char(2), 
    text varchar(2000) 
) 

與這兩個文本ID和語言代碼作爲我的主鍵。

在SQL中,我基本上做到這一點:

SELECT ISNULL(l.text, e.text) 
FROM 
    (SELECT * FROM Languages WHERE languageCode = 'en') t 
    LEFT JOIN 
    (SELECT * FROM Languages WHERE languageCode = @selectedLanguage) l 
    ON l.textId = t.textId 

這應該給我到底1個文本每個文本ID的;如果找不到所選語言,則使用英語。

是否有可能使用NSPredicate和FetchedResultsController做這樣的事情?我發現了關於SUBQUERY關鍵字的一些信息,但沒有真正解釋如何將它與NSPredicate一起使用。

+0

看到我的博客文章:[「子彈是什麼?」](http://funwithobjc.tumblr.com/post/2726166818/what-the-heck-is-subquery) – 2011-04-06 17:15:14

回答

0

好了,所以我能夠做到這一點的不同和更簡單的方法...

[NSPredicate predicateWithFormat: 
    @"language.languageCode == %@ OR 
    (language.languageCode = 'en' AND NOT (question IN %@))", languageCode, foundLanguages] 

哪裏foundLanguages是一切,我有選擇的語言文字的數組。它確實需要一個額外的獲取請求來獲取所選語言的所有文本列表,但它會完全返回所需的內容。比我在SQL中使用左連接和子查詢簡單得多。雖然可能效率較低。