GTA Közösség - A magyar GTA fórum

Multi Theft Auto (MTA) => MTA: Szerverfejlesztés => Segítségkérés => A témát indította: baglion02 - 2016. Szeptember 07. - 12:33:39

Cím: Mysql kérdés
Írta: baglion02 - 2016. Szeptember 07. - 12:33:39
Hali elkezdtem tanulgatni a mysql-t és nézegettem kódokat amiben egy ilyen sor volt(nem 1 helyen)
 

local valami = dbQuery(csatlakozas, \"SELECT * FROM users\") -- Ezt tudom
local valamieredmeny = dbPoll(valami, -1) -- ezt nem értem hogy miért kell
-- meg még van egy if
if #valamieredmeny then -- és itt az ifnél miért kell \"#\"(hash-tag) jel
-- dolgog
end

 
A válaszokat köszönöm!
Cím: Mysql kérdés
Írta: Robika1 - 2016. Szeptember 07. - 21:04:08
Szia.
A dbPoll a queryd \"állapotát ellenőrzi\" (This function checks the progress of a database query.). Az első paraméter ugye a kapcsolatod, a másik a timeout.
3 féle értéket adhat vissza:
nil - ha a visszakapott érték nem áll készen (gondolom ha timeoutol)
false - ha hiba van a queryben,e setleg megszakad a kapcsolat, stb
table - a lekérdezett értékek egy tömbje (pl mint amit írtál példa, az az egész táblát kérdezi le és berakja egy tömbbe).
Forrás: DbPoll
A # jel a táblanév előtt az arra a célra szolgál, hogy visszaadja hány elem van a tömbödbe.
Robika1
Cím: Mysql kérdés
Írta: Xistance - 2016. Szeptember 08. - 13:20:36
Idézetet írta: baglion02 date=1473244419\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"62985\" data-ipsquote-contentclass=\"forums_Topic
Hali elkezdtem tanulgatni a mysql-t és nézegettem kódokat amiben egy ilyen sor volt(nem 1 helyen)
 

Szia.
A dbPoll a queryd \"állapotát ellenőrzi\" (This function checks the progress of a database query.). Az első paraméter ugye a kapcsolatod, a másik a timeout.
3 féle értéket adhat vissza:
nil - ha a visszakapott érték nem áll készen (gondolom ha timeoutol)
false - ha hiba van a queryben,e setleg megszakad a kapcsolat, stb
table - a lekérdezett értékek egy tömbje (pl mint amit írtál példa, az az egész táblát kérdezi le és berakja egy tömbbe).
Forrás: DbPoll
A # jel a táblanév előtt az arra a célra szolgál, hogy visszaadja hány elem van a tömbödbe.
Robika1
 


local valami = dbQuery(csatlakozas, \"SELECT * FROM users\") -- Ezt tudom
local valamieredmeny = dbPoll(valami, -1) -- ezt nem értem hogy miért kell
-- meg még van egy if
if #valamieredmeny then -- és itt az ifnél miért kell \"#\"(hash-tag) jel
-- dolgog
end

 
A válaszokat köszönöm!
 
[/quote]
Szerintem magyarul akarja hallani.
query(eredmény),nums(mennyiség),selected(kiválasztott tábla) = dbPoll(valami(feltétel), -1(lefutás)) = a megadott feltételekkel végig fut a táblán.
a #valamieredmeny -t én nem is használom, nem is tudom minek akarnád. ha kiakarod kérdezni, hogy létezik e, akkor:
 
 if nums > 0 then 
-- valami
end
Cím: Mysql kérdés
Írta: baglion02 - 2016. Szeptember 09. - 08:29:06
értem, öszi szépen a válaszokat! :) és ha a -1 helyére mást nem is lehet írni igaz?
Cím: Mysql kérdés
Írta: Xistance - 2016. Szeptember 09. - 10:14:28
Idézetet írta: baglion02 date=1473402546\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"62985\" data-ipsquote-contentclass=\"forums_Topic
értem, öszi szépen a válaszokat! :) és ha a -1 helyére mást nem is lehet írni igaz?
 
Lehet, de neked az nem szükséges, sőt, kb senki másnak :D
Cím: Mysql kérdés
Írta: Xenius - 2016. Október 07. - 21:12:07
A példa kódot senkinek sem ajánlom amit a legelső hozzászólásban írtál, a -1 dbPoll egészen addig \"befagyasztja\" a szervert ameddig nem kap választ.
Cím: Mysql kérdés
Írta: thegergo02 - 2016. Október 08. - 22:46:03
Akkor mit használjunk helyette?
Cím: Mysql kérdés
Írta: dugasz1 - 2016. Október 09. - 02:35:58
Szerintem callbackkel a legjobb használni:
 
function aaa()
    dbQuery( myCallback, connection, \"SELECT * FROM table_name\" )
end
function myCallback(qh)
    local result = dbPoll( qh, 0 )   -- Timeout doesn\'t matter here because the result will always be ready
end

 
Forrás: https://wiki.multitheftauto.com/wiki/DbQuery
Ez annyival másabb, hogy a dbQuery elküldi a kérést az SQL-nek majd fut tovább nem vár a válaszra. Amikor a SQL visszaküldi a választ akkor meghívódik a callback function (myCallback) ott dbPoll-al kinyered az eredményt (ahogy az angol szöveg is írja itt nincs értelme a timedout argumentnek (2. argument) hisz már megkaptuk a választ, ezért 0 ra állítjuk hogy azonnal csinálja).
Így nem kell várnia a scriptnek a válaszra (persze ha kell az adat a tovább haladáshoz akkor nyilván meg kell várnia de na :D )
Cím: Mysql kérdés
Írta: id100 - 2016. Október 12. - 14:37:27
Ha van egy meghatározott változó amit a kliensnek küldesz át, a kliensen render alatt csinálhatsz egy forgó kört és \"Szinkronizáció...\" felirattal ott tarthatod egész addig amíg a változó \"üres\" vagy nil vagy false vagy amit alapból adtál neki. Ha csak szerver oldalon használod és nem küldesz semmit a kliensnek belőle (pl taglista az kliensnek is megy) akkor teljesen mindegy. a -1 viszont nem ajánlott, bár én nem tapasztaltam fagyást, de Xenius dolgozott rengeteg playernek míg én nem.Szóval valószínűleg nem ír hülyeséget :D