2011-04-06 98 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中使用左连接和子查询简单得多。虽然可能效率较低。