即使数据库中没有记录,也可以从sqlite获取最近7天的日期值

时间:2011-09-22 03:28:23

标签: sqlite

我需要一些帮助才能从SQLite获取过去7天的日期值。

如果有记录,我目前能够从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
}

任何人都可以帮助回答我的问题。

2 个答案:

答案 0 :(得分:1)

使用此更新您的查询并尝试:

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

您将获得最近7天的信息。

答案 1 :(得分:0)

那是目标C吗?育。 “sqlite”问题代码过多:]

使用报表数据库,数据挖掘等时,如果只有一个表可以加入日期,那就不是很荒谬了。您可以拥有一个表格,其中只包含每日添加的日期或您加入的日期,并且很容易让您在当天是否喝酒时获得“是”或“否”。 (这将是一个非常懒惰的解决方案,但会起作用)

另一个选择是查询他们在过去7天内喝的天数......可能是1天或2天。然后在今天的代码循环到今天 - 7 ...然后是一个内循环来循环返回的记录,看看那天是否匹配。如果有,那么你知道他们喝酒或者不喝酒。

嵌套循环可以工作,并且应该在7天内完成它。

这些是解决它的众多选择中的两个。然而,我厌恶目标C并且有兴趣在今晚写作:]