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