←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

MySQL numer wiersza

  • +
  • -
SeeK - zdjęcie SeeK 03.08.2013

Mam tabelę z rekordami, którą chcę w zapytaniu posegregować względem kolumny "abc" i wyciągnąć na którym miejscu znajduje się gracz o nicku "xyz". Dodatkowo chciałbym, żeby w liczeniu wierszy były brane pod uwagę tylko te rekordy które w kolumnie "def" mają warość "zyx". Jest to możliwe do zrobienia za pomocą MySQLa? Znalazłem taką stronkę: http://nospor.pl/mysql-faq.html#faq-8 ale nie potrafię chyba dobrze wyciągnąć z niej kodu. Napisałem coś takiego na razie:

 

SELECT * FROM %s WHERE `def` = 'zyx' ORDER BY abc DESC podsel WHERE `name` = '%s'

 

Jak poprawić to zapytanie? A gdy będzie już poprawione, to jak wyciągnąć pozycję danego rekordu?

Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 03.08.2013

SET @numRow = 0;
SELECT @numRow := @numRow + 1 AS numRow, `name`, `def`, `abc` FROM `%s` WHERE `name` = 'xyz' AND `def` = 'zyx' ORDER BY `abc` DESC;
?
Użytkownik MarWit edytował ten post 03.08.2013 16:56
Odpowiedz

  • +
  • -
SeeK - zdjęcie SeeK 03.08.2013

Czyli kod w PAWNie będzie wyglądał tak jak poniżej?

format(szTemp,charsmax(szTemp),"SET @numRow = 0; SELECT @numRow := @numRow + 1 AS numRow, `name`, `def`, `abc` FROM `%s` WHERE `name` = 'xyz' AND `def` = 'zyx' ORDER BY `abc` DESC;",TABELA)
if(SqlTuple) 
SQL_ThreadQuery(SqlTuple, "stworzStat", szTemp, Data, 1)

Jak w funkcji stworzStat dobrać się do numRow? Tak jak poniżej?

numRow = SQL_ReadResult(Query, SQL_FieldNameToNum(Query,"numRow"))

Użytkownik SeeK edytował ten post 03.08.2013 23:56
Odpowiedz

  • +
  • -
SeeK - zdjęcie SeeK 09.08.2013

Nie jest mi nikt w stanie pomóc?

Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 10.08.2013

Szczerze mówiąc, nie wiem czy to zadziała.

new g_Query[512],
	g_UserIndex[1];
		
g_UserIndex[0] = id;

formatex(g_Query, charsmax(g_Query), "SELECT COUNT(*) FROM `%s` WHERE `name` = `%s` AND `def` = 'zyx' ORDER BY `abc` DESC", TABELA, g_PlayerName[id]);
SQL_ThreadQuery(g_SqlTuple, "ShowResults", g_Query, g_UserIndex, sizeof(g_UserIndex));

public ShowResults(g_FailState, Handle:g_Query, g_Error[], g_ErrorCode, g_Data[], g_DataSize){
	if(g_FailState != TQUERY_SUCCESS){
		log_amx("<Query> Error: %s", g_Error);
		return;
	}
	new g_Amount = SQL_ReadResult(g_Query, 0),
		id = g_Data[0];
		
	if(!g_Amount){
		g_Amount = 1;
	}
	client_print(id, 3, "%d", g_Amount);
}
Odpowiedz

  • +
  • -
SeeK - zdjęcie SeeK 20.08.2013

Niestety, nie działa. Errory:

L 08/20/2013 - 02:14:31: [MySQL] Invalid column: -1
L 08/20/2013 - 02:14:31: [AMXX] Displaying debug trace (plugin "przegrane_godziny.amxx")
L 08/20/2013 - 02:14:31: [AMXX] Run time error 10: native error (native "SQL_ReadResult")
L 08/20/2013 - 02:14:31: [AMXX]    [0] przegrane_godziny.sma::stworzStat (line 119)
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 21.08.2013

Pokaż kod który uzyles podczas testowania
Odpowiedz

  • +
  • -
SeeK - zdjęcie SeeK 28.08.2013

Ten który podał speedkill :)

 

Problem jest w tej funkcji: SQL_ReadResult(g_Query, 0) nie można pobrać argumentu 0-owego.

Odpowiedz