首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使数据库中没有记录,也可以从sqllite中获取最近7day的day值

即使数据库中没有记录,也可以从sqllite中获取最近7day的day值
EN

Stack Overflow用户
提问于 2011-09-22 11:28:23
回答 2查看 234关注 0票数 0

我需要一些帮助来从SQLite获取过去7天的天数。

如果有记录,我目前可以从SQLite获取日期值。

我需要的是显示过去7天内这个人是否做了什么。

例如,如果这些人今天只喝一瓶啤酒,它将显示

代码语言:javascript
复制
drink - thur
no - wed
no - tue
no - mon
no - sun
no - sat
no - sat

例如,如果这些人没有喝任何东西,它将显示

代码语言:javascript
复制
no - thur
no - wed
no - tue
no - mon
no - sun
no - sat
no - sat

例如,如果这些人在过去的7天内喝了任何东西,它将显示

代码语言:javascript
复制
no - thur
drink - wed
no - tue
no - mon
drink - sun
no - sat
no - sat

这是SQL代码

代码语言:javascript
复制
+ (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

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-22 14:56:55

使用以下内容更新您的查询,并尝试:

代码语言:javascript
复制
"SELECT DATE(datetime) FROM consumed GROUP BY DATE(datetime) ORDER BY datetime DESC Limit 7"

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

票数 1
EN

Stack Overflow用户

发布于 2011-09-22 12:44:07

这是目标C吗?啊哈。“sqlite”问题的代码太多:]

当使用报表数据库、数据挖掘等时,拥有一个只包含日期的表并不可笑。你可以有一个只有日期的表,这些日期被添加到每天或任何你连接到的表中,这样你就可以很容易地得到他们当天是否喝了酒的是或否。(这将是一个相当懒惰的解决方案,但可以工作)

另一种选择是查询他们在过去7天内饮酒的天数……这可能是1天或2天。然后在代码中循环通过今天到今天-7 ..。然后通过一个内部循环遍历返回的记录,看看当天是否有匹配的记录。如果有,那么你就知道他们喝了或者没有喝。

嵌套循环可以工作,并且应该在7天内执行得很好。

这些是解决它的大量选择中的两个。然而,我讨厌目标C,今晚没有兴趣写任何东西:]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7509241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档