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

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: buci11 - 2012. augusztus 20. - 00:15:38

Cím: Mik ezek? (MySQL)
Írta: buci11 - 2012. augusztus 20. - 00:15:38
ezt a parancs sort egy publikált jármûrendszerbõl néztem mert próbálom tanulgatni a MySQL alapjait írom hogy mit nem értek és mit igen // jellel
 
public OnFilterScriptInit()
{
mysql_debug(1);// ezzel elindítjuk azt hogy kiírja a hibákat egy fájlba
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);// ezzel ugye csatlakozunk egy elõre definiált hosthoz
if(mysql_ping() != 1)//lekéri hogy él e a kapcsolat
{
        print(!\"MySQL: Kapcsolódás sikertelen!\");
return 1;
}
print(\"\\n--------------------------------------\");
print(\" névreszóló autó | by Ryuuzaki\");
print(\"--------------------------------------\\n\");
for(new i; i < MAX_SLOTS; i++)
{
      format(query, sizeof(query), \"SELECT * FROM cars WHERE slot = \'%d\'\", i);//na ez nem tiszta azt hiszem ugye hogy a SELECT az kiválasztja a táblát FROM az oszlop WHERE az pedig azt ahol a sor egyenlõ az i vel
      mysql_query(query);//sejtelmem sincs hogy mi
      mysql_store_result();//szintén
if(mysql_num_rows() != 0)//szintén
{
   new linen[1024];
   mysql_fetch_row(linen);//nem tudom
   new tarolo[5];
   new Float:tarolo2[4];
   sscanf(linen, \"p<|>{ds[24]}dffffdddd\", tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);//ez teljessen zavaros
   carplay = CreateVehicle(tarolo[0], tarolo2[0], tarolo2[1], tarolo2[2], tarolo2[3], tarolo[1], tarolo[2], -1);
   AddVehicleComponent(carplay, tarolo[3]);
   AddVehicleComponent(carplay, tarolo[4]);
   mysql_free_result();//valami felszabadítani a cellákat vagy mi :)
}
}
return 1;
}

 
Kérek valakit hogy javítsa ki azt amit rosszul tudtam és amit nem tudtam azt mondja meg köszönöm szépen
Cím: Mik ezek? (MySQL)
Írta: Fl0rian - 2012. augusztus 20. - 02:13:59
 format(query, sizeof(query), \"SELECT * FROM cars WHERE slot = \'%d\'\", i);

 
Kiválasztjuk a sort, a cars táblából onnan ahol a slot egyenlõ az i értékével.
 
mysql_query(query);

 
Futtatja a lekérdezést. ( Feljebb formáztuk )
 
mysql_store_result();

 
Az eredményt(lekérdezés) megtartja. (Ezáltal meg marad a lekérdezett infó)
 
(mysql_num_rows() != 0)

 
Hogyha van ilyen sor..
 
mysql_fetch_row(linen);

 
Illessz be a mezõk választásaként \'|\' deliméter(eket).
 
sscanf(linen, \"......

 
A változóknak értéket ad az sscanf szétválasztóval.
 
mysql_free_result();

 
Felszabadítja a memó.-t.
Cím: Mik ezek? (MySQL)
Írta: Zsolesszka - 2012. augusztus 20. - 08:12:46
    public OnFilterScriptInit()
    {
            mysql_debug(1);// ezzel elindítjuk azt hogy kiírja a hibákat egy fájlba
            mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);// ezzel ugye csatlakozunk egy elõre definiált hosthoz (nem csak hosthoz hanem egy számodra létrehozott adattömbhöz is mint felhasználónév és adatbázisnév (SQL_USER, SQL_DB)
            if(mysql_ping() != 1)//lekéri hogy él e a kapcsolat
            {
                    print(!\"MySQL: Kapcsolódás sikertelen!\");
                    return 1;
            }
            print(\"\\n--------------------------------------\");
            print(\" névreszóló autó | by Ryuuzaki\");
            print(\"--------------------------------------\\n\");
            for(new i; i < MAX_SLOTS; i++)
            {
                    format(query, sizeof(query), \"SELECT * FROM cars WHERE slot = \'%d\'\", i); // Az összes adatoszlop kiválasztása (SELECT *) a cars adattáblán (FROM cars) aminek a slot adatoszlop bármelyik mezõjének értéke = i -vel (WHERE slot = \'%d, i)\'
         mysql_query(query);// tekintheted belépési pontnak is mysql adattároláshoz (elküldi a mysqql szerverhez mit is akarsz tõle) :D
                    mysql_store_result();// a mysql szervertõl kapott adatok tárolása további felhasználásra
                    if(mysql_num_rows() != 0)// ellenõrzi hogy mennyi adatsort kaptunk vissza eredményként (pontosabban itt kaptunk-e vissza adatot)
                    {
                            new linen[1024];
                            mysql_fetch_row(linen);//a visszakapott adatsorunkat tárolja számunkra a létrehozott \"linen\" változóban (hogy feltudjuk használni pawnban) az elõre meghatározott | delimiterrel pl.: 3|infernus|0|2.3212312|4.321231|4.323231|..
                            new tarolo[5];
                            new Float:tarolo2[4];
                            sscanf(linen, \"p<|>{ds[24]}dffffdddd\", tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);//szét darabolja a linen változóba tett adatsorunkat (ami nem más csak számok nevek egymástól | karakterrel elválasztva)
                            carplay = CreateVehicle(tarolo[0], tarolo2[0], tarolo2[1], tarolo2[2], tarolo2[3], tarolo[1], tarolo[2], -1);
                            AddVehicleComponent(carplay, tarolo[3]);
                            AddVehicleComponent(carplay, tarolo[4]);
                            mysql_free_result();// a mysql_store_result által tárolt adatok felszabadítása
                    }
            }
            return 1;
    }

 
Amúgy ez egy eléggé elcseszett kód.
Egy for ciklus ami lehet lefut kétezerszer és kétezer alkalommal kér le adatot mysql-rõl.  Itt a fórum is egy oldal betöltésnél is alig ~30 körüli lekérdezést hajt végre nem 2000-et. :D
Cím: Mik ezek? (MySQL)
Írta: buci11 - 2012. augusztus 20. - 14:44:11
:D köszönöm kezdem érteni de még ez nem tuti hogy ebben a sorba
sscanf(linen, \"p<|>{ds[24]}dffffdddd\", tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);
a pirossal jelölt résznek mi a jelentése
Cím: Mik ezek? (MySQL)
Írta: JBauer - 2012. augusztus 20. - 14:56:59
A \"p<|>\" rész a | karakternél való elválasztást, a \"d\" egy egész számot, az \"s[24]\" pedig egy 24 hosszúságú karaktert jelöl.
Cím: Mik ezek? (MySQL)
Írta: buci11 - 2012. augusztus 20. - 15:01:55
és miért van {} ilyen karakter benne?
Cím: Mik ezek? (MySQL)
Írta: Zsolesszka - 2012. augusztus 20. - 15:18:51
Mert azt figyelmen kívül hagyja. Ha megtalálja benne azokat a részeket.
Ha nem lenne ott akkor be kellene illesztened még kettõ változót:
 
sscanf(linen, \"p<|>ds[24]dffffdddd\",int, string, tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);[/quote]
Cím: Mik ezek? (MySQL)
Írta: buci11 - 2012. augusztus 20. - 15:29:49
és ha alapból nem raknánk bele semmit?
sscanf(linen, \"p<|>dffffdddd\", tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);
Cím: Mik ezek? (MySQL)
Írta: Csabesz - 2012. augusztus 20. - 15:53:56
Idézetet írta: ..::Endyke::.. date=1345469389\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"26488\" data-ipsquote-contentclass=\"forums_Topic
és ha alapból nem raknánk bele semmit?
sscanf(linen, \"p<|>dffffdddd\", tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);
 
Akkor elcsúsznának az adatok. (mindegyik 2-vel elõrébb)
Cím: Mik ezek? (MySQL)
Írta: buci11 - 2012. augusztus 20. - 18:09:05
tehát kell 2 üres adat tárolót beilleszteni scanf be hogy rendben legyenek a dolgok? :D de akkor mind1 hogy mik ezek ? tehát i,d,s[20] bármeik?
Cím: Mik ezek? (MySQL)
Írta: Csabesz - 2012. augusztus 20. - 18:56:31
Idézetet írta: ..::Endyke::.. date=1345478945\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"26488\" data-ipsquote-contentclass=\"forums_Topic
tehát kell 2 üres adat tárolót beilleszteni scanf be hogy rendben legyenek a dolgok? :D de akkor mind1 hogy mik ezek ? tehát i,d,s[20] bármeik?
 
nem kell tároló neki... mivel nem csinálsz vele semmit... ezért is van kapcsos zárójelben hogy azt hagyja ki.
azok meg változó típusok.
Cím: Mik ezek? (MySQL)
Írta: Zsolesszka - 2012. augusztus 20. - 19:36:05
Ez a kód után illessz be egy print sort:
 
                        new linen[1024];
                        mysql_fetch_row(linen);//nem tudom
                        print(line);
                        new tarolo[5];
[/quote]
Majd indítsd el a samp szervert és keresd meg amit kiírt a server_log.txt fájlba majd akkor azt tanulmányozd és talán megérted minek kell oda.
De el is lehet kerülni ha te mysql lekérésnél meghatározod melyik adatoszlopok adatival térjen vissza, csillag helyett beírod azokat amelyekre neked szükséged van.
 
SELECT `x`,`y`,`z`
Cím: Mik ezek? (MySQL)
Írta: buci11 - 2012. augusztus 21. - 13:43:57
Köszönöm szépen a válaszokat, zárom a témát és mindenkit felpontozok!