Как вывести список результатов на основе заказа, используя запрос - PullRequest
0 голосов
/ 07 февраля 2012
//===================================================================================
- ( NSMutableDictionary * ) getDataToDisplayTierTwo:(NSString*)dbPath:(NSString*)iD{
//===================================================================================
    NSMutableDictionary *aTierTwoTemplateData = [[NSMutableDictionary alloc]init];

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    {

        NSString *selectSQL = [NSString stringWithFormat: @"select * from sub_categories_reference scr inner join storyboard_sub_categories ssc on ssc.id = scr.sub_category_id inner join subcategory_order as sco on sco.sub_category_id = scr.sub_category_id where  scr.main_category_id = %@ and sco.main_category_id = %@ order by sco.position asc",iD,iD];

        NSLog(@"%@", selectSQL);

        const char *sql_query_stmt = [selectSQL UTF8String];

        sqlite3_stmt *selectstmt;

        if(sqlite3_prepare_v2(database, sql_query_stmt, -1, &selectstmt, NULL) == SQLITE_OK) 
        {

            while(sqlite3_step(selectstmt) == SQLITE_ROW) 
            {
                NSString *aValue = [[NSString alloc] initWithUTF8String:
                                    (const char *) sqlite3_column_text(selectstmt, 6)];

                NSString *aId = [[NSString alloc] initWithUTF8String:
                                 (const char *) sqlite3_column_text(selectstmt, 5)];


               [aTierTwoTemplateData setObject:aId forKey:aValue];

                [aValue release];
                [aId release];

                NSLog(@"%@ %@ ^^^^^^^^^^^^^^^^^^^^picker value id ", aValue, aId);

            }
        }
    }   
    sqlite3_close(database); 


    return aTierTwoTemplateData;
}

Я могу получить набор результатов, когда назначаю его массиву, но он теряет порядок, в котором я хранился в словаре.

На самом деле, я сохранил набор результатов на основе поля позиции.

Когда я присваиваю результирующий набор в массив, порядок меняется.

Пожалуйста, дайте мне знать, как мне справиться с этой ситуацией.

Это не дубликат, так как в базе данных у меня есть кулмн "позиция"

1 Ответ

0 голосов
/ 07 февраля 2012

Если вы хотите сохранить данные в виде пары ключ-значение и поддерживать порядок, то вы можете использовать комбинацию NSArray и NSDictionary.
Этот же код будет:


//===================================================================================
- ( NSArray * ) getDataToDisplayTierTwo:(NSString*)dbPath:(NSString*)iD{
//===================================================================================
    NSMutableArray *aTierTwoTemplateData = [[NSMutableArray alloc]init];

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    {

        NSString *selectSQL = [NSString stringWithFormat: @"select * from sub_categories_reference scr inner join storyboard_sub_categories ssc on ssc.id = scr.sub_category_id inner join subcategory_order as sco on sco.sub_category_id = scr.sub_category_id where  scr.main_category_id = %@ and sco.main_category_id = %@ order by sco.position asc",iD,iD];

        NSLog(@"%@", selectSQL);

        const char *sql_query_stmt = [selectSQL UTF8String];

        sqlite3_stmt *selectstmt;

        if(sqlite3_prepare_v2(database, sql_query_stmt, -1, &selectstmt, NULL) == SQLITE_OK) 
        {

            while(sqlite3_step(selectstmt) == SQLITE_ROW) 
            {
                NSString *aValue = [[NSString alloc] initWithUTF8String:
                                    (const char *) sqlite3_column_text(selectstmt, 6)];

                NSString *aId = [[NSString alloc] initWithUTF8String:
                                 (const char *) sqlite3_column_text(selectstmt, 5)];



               [aTierTwoTemplateData addObject:[NSDictionary dictionaryWithObject:aId forKey:aValue]];

                [aValue release];
                [aId release];

                NSLog(@"%@ %@ ^^^^^^^^^^^^^^^^^^^^picker value id ", aValue, aId);

            }
        }
    }   
    sqlite3_close(database); 

    return [aTierTwoTemplateData autorelease];
}

Таким образом, вы получите массив словарей, в котором ваши значения будут храниться в словаре, а порядок данных также будет сохранен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...