iOS:针对以前的条目过滤SQLite查询/检查条目

时间:2011-10-07 02:21:05

标签: ios sqlite

好的,所以我在SQLite数据库中搜索名为Artists的行中的所有条目...但我不希望同一个艺术家出现两次......

-(NSArray *)findAllArtists
{
    NSMutableArray *returnArray = [[[NSMutableArray alloc] init] autorelease];

    NSString *query = @"SELECT * FROM Painting";

    sqlite3_stmt *statement;

    if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) 
    == SQLITE_OK) 
    {        
        while (sqlite3_step(statement) == SQLITE_ROW) 
        {
            char *uniqueIdChars = (char *) sqlite3_column_text(statement, 0);
            char *artistChars = (char *) sqlite3_column_text(statement, 1);
            NSString *uniqueId = [[NSString alloc] initWithUTF8String:uniqueIdChars];
            NSString *artist = [[NSString alloc] initWithUTF8String:artistChars];

            PaintingInfo *info = [[PaintingInfo alloc] initWithUniqueId:uniqueId artist:artist];
            [returnArray addObject:info];

            [uniqueId release];
            [artist release];
        }

        sqlite3_finalize(statement);
    }

    sqlite3_close(database);
    return returnArray;    
}

所以,我在想的是一种方法可能是在将结果添加到returnArray之前使用循环内部,在那里我检查它是否与之前的结果匹配......听起来相当简单,但由于某种原因,我没有得到我试图工作的循环(想想我可能已经工作太久没有睡觉,所以我盲目地主演我的错误)... 再说一遍,我对SQLite相当新,所以它可能是一种糟糕的方式......

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

为什么不让sql引擎做这项工作?选择不同的

http://www.sqlite.org/lang_select.html

示例:

SELECT DISTINCT artist FROM Painting

如果出于某种原因需要在循环中的代码中进行处理,可以查看作为哈希集的NSSet。您可以在处理时将每个艺术家添加到集合中,并在处理之前检查集合中是否存在。

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSSet_Class/Reference/Reference.html

例如,这个:

NSArray *artists = [NSArray arrayWithObjects:@"bob", @"jane", @"jane", nil];

NSMutableSet *distinctArtists = [[NSMutableSet alloc] init];
NSMutableArray *list = [[NSMutableArray alloc] init];
for (NSString* artist in artists)
{
    if (![distinctArtists containsObject:artist])
    {
        [distinctArtists addObject:artist];
        [list addObject:artist];
    }
}

// print
for (NSString *artist in list)
{
    NSLog(@"artist: %@", artist);
}

输出:

2011-10-06 22:51:16.457 Craplet[1982:707] artist: bob
2011-10-06 22:51:16.459 Craplet[1982:707] artist: jane

答案 1 :(得分:0)

SELECT * FROM绘画GROUP BY Artist具有相同的效果