• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Pobieranie wyników z bazy w zależności od 2 losowych parametrów

GarQet

Own3d!
Joined
Feb 10, 2009
Messages
1,381
Solutions
14
Reaction score
81
Eloszka. Na wstępie, Azi jeśli nie chcesz pomagać to chociaż nie zaspamuj mi tematu, bo potrzebuje szybkiej i efektywnej pomocy.

Chodzi o pobranie wyników z bazy. Mianowicie: mam 8 kolumn z wynikami liczbowymi.
Przypuśćmy, że kolumny w tabeli x nazywają się tak: 5d.2m, 6d.2m, 7d.2m, 8d.2m, 9d.2m, 10d.2m, 1d.3m, 2d.3m.
Maksymalna wartość jaką może osiągnąć d i m wynosi 10. W momencie kiedy wartość d równa się 10 następna kolumna zaczyna odliczanie od nowa, z tym że wartość przy m zwiększa się o jeden.
Moim zadaniem jest pobranie wyników, wartości z 4 ostatnich kolumn jakie istnieją w tejże tabeli, czyli dla przykładu z: 9d.2m, 10d.2m, 1d.3m, 2d.3m.
I teraz jest główne pytanie, w jaki sposób mogę pobrać dane 4 ostatnich kolumn w zależności od 2 zmiennych?
Gdybym np. pobierał dane z 4 ostatnich kolumn gdzie ostatnią jest np. 9d.2m, to nie ma problemu, co prawda kod jest dość długi. Ale w momencie kiedy wartość przy m się zwiększa to nie mam pomysłu jak pobrać te wyniki.
Mam sobie takie cudo:
LUA:
local d = dowolna liczba z zakresu od 1-10
local m = dowolna liczba z zakresu od 1-10
local w = {1, 2, 3, 4, 5}
local v = 0
if isInArray(w, d) == false then
	v = (d - 4)
	local f1 = db.getResult("SELECT `".. v .."d.".. m .."m` FROM `x` WHERE `name` = '".. getCreatureName(cid) .."';")
	local f2 = db.getResult("SELECT `".. v+01 .."d.".. m .."m` FROM `x` WHERE `name` = '".. getCreatureName(cid) .."';")
	local f3 = db.getResult("SELECT `".. v+02 .."d.".. m .."m` FROM `x` WHERE `name` = '".. getCreatureName(cid) .."';")
	local f4 = db.getResult("SELECT `".. v+03 .."d.".. m .."m` FROM `x` WHERE `name` = '".. getCreatureName(cid) .."';")
	if(f1:getID() == -1 or f2:getID() == -1 or f3:getID() == -1 or f4:getID() == -1) then
		return true
	end
	local f = (f1:getDataInt("".. v .."d.".. m .."m") + f2:getDataInt("".. v+01 .."d.".. m .."m") + f3:getDataInt("".. v+02 ..".".. m .."m") + f4:getDataInt("".. v+03 ..".".. m .."m"))
	for i = 1, 4 do
		f[i]:free()
	end
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Zsumowany wynik z 4 ostatnich tabel wynosi: ".. f ..".")
	return true
elseif isInArray(w, d) == true then
	v = (10 - (d + 4))
	m = m - 1
	return true
end
Nie mam pomysłu jak pobrać wyniki z elseif'a, gdy zmieni mi się moje m.
Pomoże ktoś?
 
Last edited:
nie rozumiem zbyt jak ci chodzi z tym "m"

co do 4 ostatnich tabel, to np. możesz przypisać klucz~~ (ID) i potem patrzeć, które ID jest największe
 
Bo patrz, gdy w ostatniej kolumnie w danej jaka znajduje się w tabeli x przy wartości D znajduje się liczba taka, która nie ma wpływu na zmniejszenie się o jeden wartości M to jest wszystko w porządku bo da radę w jakiś sposób pobrać wyniki tych czterech ostatnich kolumn. Ale w momencie kiedy np. ostatnia kolumna jaka znajduje się w tejże tabeli to 2d.3m to poprzednie kolumny po kolei są o wartości: 1d.3m, 10d.2m, 9d.2m. Czyli po 2 kolumnach nagle zmienia się wartość M o jeden. I nie wiem jak sobie poradzić w zależności od tego M.
Czyli jak np. moja ostatnia kolumna to 2d.3m to rozpatruje te kolumny co wyżej, jak ostatnią jest 3d.3m to rozpatruje te: 2d.3m, 1d.3m, 10d.2m itp.
Pomoże ktoś? Mam nadzieję, że teraz jest zrozumiale.
 
Last edited:
SHOW TABLES FROM `nazwa_bazy` LIMIT 4
? tak bedzie git, bo nie mozna orderowac tu, tym bardziej z dupy wyjętym `name` jak to zrobiłem.
 
Last edited:
Nie kumam, po co mam pobierać tabele z bazy, skoro nie w tym tkwi problem. W tabeli "test" mam te wszystkie kolumny czy jak to się tam zwie, które trzymają te dane, które muszę pobrać.
Ma ktoś jakiś pomysł jak mi skutecznie pomóc?
 
Co to dokładnie ma robić, jaki jest tego cel (działanie)?
 
Skrypt ma pobierać wyniki z 4 ostatnich kolumn jakie znajdują się w danej tabeli x, a następnie sumować ich wartości i wysyłać wynik w grze.
 
Last edited:
nie rozumiem twojego zapisu

d5.m6

czy to są 2 kolumny d i m

i np.

id | D | M
1 |5 | 4
2 |8 | 3

itd.?
 
id | 5d.2m | 6d.2m | 7d.2m | ... | 1d.3m | ...
1 | 5 | 4 | 1 | 4 | 3 | 4
2 | 5 | 4 | 1 | 4 | 3 | 4
itp. itd.
 
Nie kumam, po co mam pobierać tabele z bazy, skoro nie w tym tkwi problem. W tabeli "test" mam te wszystkie kolumny czy jak to się tam zwie, które trzymają te dane, które muszę pobrać.
Ma ktoś jakiś pomysł jak mi skutecznie pomóc?

w pierwszym poście pisałeś, że masz tabele, nie kolumny. o ;
gdybyś chociaż umiał poprawnie się wysłowić byś otrzymał pomoc dawno.
 
nie chce mi się za free myśleć chyba bo nie dokońca czaje czemu robisz zapis

5d.3m zamiast zrobić 2 kolumny, osobna dla D osobna dla M
 
Chodzi o to, że w każdej z tych kolumn jest jakaś inna wartość, która jest przyporządkowana jakiemuś graczowi. Dlatego tak a nie inaczej.
 
Back
Top