0

iPhone アプリで SQLite3 を使用して、テーブル (tbresults) からデータを選択し、データに対していくつかの計算を行い、それを uitableview に表示しています。SQL コマンドは SUM 関数を使用していますが、私のアプリはそれを気に入っていないようです。

テーブルから選択する方法は以下ですが、次の行で処理が失敗するようです。

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

メソッドの完全なコードは次のとおりです。

+ (void) getLeagueTable {

Tag_TrackerAppDelegate *appDelegate = (Tag_TrackerAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.tbresultsArray = [[NSMutableArray alloc] init];


const char *sql = "select a.resultid, a.teamname, sum(b.played), sum(b.win), " 
"sum(b.draw), sum(b.lose), sum(b.for), sum(b.against), sum(b.win * 3 + b.draw) "
"from tbteam a, tbresults b, tbseason c where a.teamid = b.teamid and c.active = 'Y'" 
"and b.seasonid = c.seasonid group by b.teamid order by points desc;";


sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

    sqlite3_stmt *selectstmt;

    while(sqlite3_step(selectstmt) == SQLITE_ROW) {

        NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
        tbresults *resultsObj = [[tbresults alloc] initWithPrimaryKey:primaryKey];

        resultsObj.teamname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];

        resultsObj.played = sqlite3_column_int(selectstmt, 2);
        resultsObj.won = sqlite3_column_int(selectstmt, 3);
        resultsObj.drawn = sqlite3_column_int(selectstmt, 4);
        resultsObj.lost = sqlite3_column_int(selectstmt, 5);
        resultsObj.For = sqlite3_column_int(selectstmt, 6);
        resultsObj.Against = sqlite3_column_int(selectstmt, 7);
        resultsObj.points = sqlite3_column_int(selectstmt, 8);

        [appDelegate.tbresultsArray addObject:resultsObj];
        [resultsObj release];
    }
}
else
    sqlite3_close(database); 

}

iPhoneでSUM機能を使用する際に問題があるかどうか知っている人はいますか? 残りのコードを確認し、再確認しました。データベースは正常に開かれています。

どんな助けでも大歓迎です。

4

2 に答える 2

0

少なくとも、適切なgroupby句が必要です。

  "select a.resultid, a.teamname, sum(b.played), sum(b.win), " 
"sum(b.draw), sum(b.lose), sum(b.for), sum(b.against), sum(b.win * 3 + b.draw) "
"from tbteam a, tbresults b, tbseason c where a.teamid = b.teamid and c.active = 'Y'" 
"and b.seasonid = c.seasonid group by a.resultid, a.teamname order by points desc;";
于 2009-08-03T18:56:34.700 に答える
0

どのようなエラーが表示されますか?

select ステートメントが無効だと思います。列 a.resultid の選択を停止するか、この列を group by に含めると機能します。

于 2009-08-03T18:48:32.407 に答える