Dlaczego zapytanie do bazy nie działa poprawnie?

0

witam, zrobiłem sobie o to takie zapytanie:

    int pc_get_online_players(lua_State* L){
        char szQuery[QUERY_MAX_LEN];

        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();

        snprintf(szQuery,sizeof(szQuery),"select count(id) from player.player%s where online = 1",get_table_postfix());
        SQLMsg * pMsg = DBManager::instance().DirectQuery(szQuery);
        MYSQL_ROW row;

        for(int i = 0; (row = mysql_fetch_row(pMsg->Get()->pSQLResult)) != NULL; ++i){
            lua_pushstring(L,row[0]);
        }
        return 1;
    }

ale tak jakby nie działało bo nie zlicza graczy, może ktośpowiedzieć gdzie błąd popełniłem?

0

1. Sprawdź debuggerem co otrzymujesz w wyciągniętym row. Powinieneś widzieć tam treść, której szukasz, chyba ze wywołana przez Ciebie metoda lua_pushstring czyni jeszcze coś, o czym nie wiem.
2. Jeśli w surowe row zawiera prawidłowe dane to pozostaje tylko kwestia Twojej obróbki. Tutaj znów: nie wiem czym jest lua_pushstring.
3. Jeśli dane są, ale nie są prawidłowe, wtedy jest to juz pytanie o MySQL raczej do działu poświęconego bazom, wydaje mi się jednak, że w swoim zapytaniu niepotrzebnie dodajesz id do funkcji COUNT().

Spróbuj z gwiazdką: COUNT(*), wtedy powinno Ci zliczyć dowolne, które wybrane zostały z online równym 1.

0

@Bartosz36: pushstring zwraca stringa a pushnumber zwraca integer
spróbuje z count(*)

2

@Bartosz36: niestety bez zmian, dalej pobiera tylko 1 rekord

@Programistyczny a ile według Ciebie rekordów powinno zwrócić zapytanie typu

select count(id) from table where field = value

Bo jak dla mnie to dokładnie jeden. Więc wszystko jest ok.

0

chcę pobrać wszystkie rekord gdzie online == 1

W takim razie użyj zapytania bez grupowania:

select * from player.playe where online = 1

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0