Проблема с использованием функции SUM с SQLite3 на iPhone

Я использую SQLite3 в своем приложении для iPhone, чтобы выбирать данные из таблицы (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); 

}

Кто-нибудь знает, есть ли проблема с использованием функции SUM на iPhone? Я проверил и дважды проверил остальную часть кода. База данных успешно открывается.

Любая помощь будет оценена по достоинству.


person Community    schedule 03.08.2009    source источник


Ответы (2)


Какую ошибку вы получаете?

Я думаю, что ваш оператор выбора недействителен, прекратите выбирать столбец a.resultid или включите этот столбец в группу, и он будет работать.

person tuinstoel    schedule 03.08.2009
comment
Хотел бы я сказать, что это за ошибка, но я не знаю, что означает код ошибки. Код 4123824, но нигде не могу найти этот код. Я просто знаю, что sqlite3_prepare_v2 не равно SQLITE_OK. Я также попробовал ваше предложение об удалении a.resultid или перемещении его в предложение group by, но, к сожалению, это не сработало. - person ; 03.08.2009

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

  "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;";
person nos    schedule 03.08.2009
comment
То, как у меня есть предложение group by, работает для меня в терминальном сеансе. Когда я тестирую SQL в терминале, я немного изменяю SQL, чтобы возвращать новые столбцы для отображения суммированных значений, т.е. sum(b.lose) как Lost. Если я использую групповое предложение, которое вы предлагаете, данные не возвращаются в нужном мне формате. . Спасибо за предложение. - person ; 03.08.2009