2009-08-03 8 views
0

私のiPhoneアプリケーションでSQLite3を使用してテーブルからデータを選択しています(tbresults)。データの計算をいくつか行い、それを私のuitableviewに表示します。 sqlコマンドはSUM関数を使用しており、私のアプリケーションはそれを気に入らないようです。iPhoneでSQLite3でSUM関数を使用するときの問題

以下の表からselectを行う方法は以下の通りですが、次の行で処理が失敗するようです。

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関数を使用して、問題があれば誰でも知っていますか?私はチェックし、コードの残りの部分をダブルチェックしました。データベースが正常にオープンされています。

ご協力いただければ幸いです。

答えて

0

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

私はあなたのselectステートメントが無効であると思う、列a.resultidの選択を停止するか、この列をグループに含めると機能します。

あなたは、少なくとも句で適切なグループを必要とするだろう
+0

私は、エラーが何であるかを言うことがしたいが、私は、エラーコードが何を意味するのか分かりません。コードは4123824ですが、どこでもそのコードを見つけることはできません。私はsqlite3_prepare_v2がSQLITE_OKと等しくないことを知っています。 また、a.resultidを削除したり、group by節に移動したりすることについてあなたの提案を試みましたが、残念なことに動作しませんでした。 –

0

"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;"; 
+0

私はgroup by節を持っている方法は私のためにターミナルセッションで動作します。私がターミナルでSQLをテストすると、SQLをわずかに変更して新しい列を返して合計値を表示します。つまり、sum(b.lose)はLostです。 グループ句を使用すると、私は欲しい。 しかし、提案をありがとう。 –

関連する問題