получение значения дня за последние 7 дней из sqllite, даже если в базе данных нет записей - PullRequest
0 голосов
/ 22 сентября 2011

Мне нужна помощь в получении значения дня за последние 7 дней из SQLite.

В настоящее время я могу получить значение дня из SQLite, если есть записи.

Ват мне нужноэто показать последние 7 дней, если парень что-то сделал.

пример, если парни пьют только пиво сегодня, он покажет пример

drink - thur
no - wed
no - tue
no - mon
no - sun
no - sat
no - sat

, если парни ничего не пили, он покажет

no - thur
no - wed
no - tue
no - mon
no - sun
no - sat
no - sat

пример, если ребята что-нибудь пьют в течение последних 7 дней, он покажет

no - thur
drink - wed
no - tue
no - mon
drink - sun
no - sat
no - sat

это код SQL

+ (void) getInitialDataToDisplay:(NSString *)dbPath {

    DrinkTabsAndNavAppDelegate *appDelegate = (DrinkTabsAndNavAppDelegate *)[[UIApplication sharedApplication] delegate];

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

        const char *sql = "SELECT DATE(datetime) FROM consumed GROUP BY DATE(datetime) ORDER BY datetime DESC";
        sqlite3_stmt *selectstmt;
        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

            while(sqlite3_step(selectstmt) == SQLITE_ROW) {
                NSString *dateDrunk = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 0)];
                NSDate *theDate = [NSDate dateFromString:dateDrunk withFormat:@"yyyy-MM-dd"];
                DayOfDrinks *drinkDayObj = [[DayOfDrinks alloc] initWithDateConsumed:theDate];
                [drinkDayObj hydrateDetailViewData];
                //NSLog([NSDate stringFromDate:drinkDayObj.dateConsumed withFormat:@"yyyy-MM-dd"]);
                [appDelegate.drinksOnDayArray addObject:drinkDayObj];
                [drinkDayObj release];
            }
        }
    }
    else
        sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory.
}

DrinkHistoryTableViewController.m

if (drunked<7) {
    for (int i=drunked; i<7; i++) {


        NSString * dayString= [NSString stringWithFormat:@"Nil"];/

        [dayArray addObject:dayString];

        }
    }

    for(int i=drunked; i>0; i--) 
    {
        DayOfDrinks *drinksOnDay = [appDelegate.drinksOnDayArray objectAtIndex:i-1];

        NSString * dayString= [NSDate stringForDisplayFromDateForChart:drinksOnDay.dateConsumed];

        [dayArray addObject:dayString];//X label for graph the day of drink.

        drinksOnDay.isDetailViewHydrated = NO;

        [drinksOnDay hydrateDetailViewData];

        NSNumber *sdNumber =  drinksOnDay.standardDrinks; // pass value over to Standard Drink Numbers

        //[sdArray addObject: sdNumber]; 

        float floatNum = [sdNumber floatValue]; // convert sdNumber to foat

        [sdArray addObject:[NSNumber numberWithFloat:floatNum]];//add float Value to sdArray
}

Может кто-нибудь помочь ответить на мой вопрос большое спасибо.

Des

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Обновите ваш запрос этим и попробуйте:

"SELECT DATE(datetime) FROM consumed GROUP BY DATE(datetime) ORDER BY datetime DESC Limit 7"

Вы получите информацию за последние 7 дней.

0 голосов
/ 22 сентября 2011

Это цель С?ЮК.Слишком много кода для вопроса «sqlite»:]

При работе с базами данных отчетов, анализом данных и т. Д. Не смешно иметь таблицу с только датами, к которой вы можете присоединиться.У вас может быть таблица с просто датами, которые добавляются к ежедневной или любой другой, к которой вы присоединяетесь, и которая позволит вам легко получить ДА или НЕТ, независимо от того, пили ли они в тот день.(Это было бы довольно ленивым решением, но сработало бы)

Другой вариант - просто запросить дни, которые они выпили за последние 7 дней ... которые могут составлять 1 или 2 дня.Затем в цикле кода от сегодняшнего дня до сегодняшнего дня - 7 ... и затем внутренний цикл для циклического просмотра возвращенных записей, чтобы увидеть, есть ли совпадение для этого дня.Если есть, то вы знаете, что они пили или не пили.

Вложенный цикл будет работать, и он будет работать нормально, если делать это в течение 7 дней.

Это 2 из множества вариантовреши это.Я, однако, ненавижу Цель C и хочу писать сегодня вечером:]

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