Szerző Téma: Mik ezek? (MySQL)  (Megtekintve 1488 alkalommal)

Nem elérhető buci11

  • 502
    • Profil megtekintése
Mik ezek? (MySQL)
« Dátum: 2012. augusztus 20. - 00:15:38 »
0 Show voters
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

Mik ezek? (MySQL)
« Válasz #1 Dátum: 2012. augusztus 20. - 02:13:59 »
+1 Show voters
 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.

Mik ezek? (MySQL)
« Válasz #2 Dátum: 2012. augusztus 20. - 08:12:46 »
+1 Show voters
    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

Nem elérhető buci11

  • 502
    • Profil megtekintése
Mik ezek? (MySQL)
« Válasz #3 Dátum: 2012. augusztus 20. - 14:44:11 »
0 Show voters
: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

Nem elérhető JBauer

  • 1407
    • Profil megtekintése
Mik ezek? (MySQL)
« Válasz #4 Dátum: 2012. augusztus 20. - 14:56:59 »
+1 Show voters
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.

Nem elérhető buci11

  • 502
    • Profil megtekintése
Mik ezek? (MySQL)
« Válasz #5 Dátum: 2012. augusztus 20. - 15:01:55 »
0 Show voters
és miért van {} ilyen karakter benne?

Mik ezek? (MySQL)
« Válasz #6 Dátum: 2012. augusztus 20. - 15:18:51 »
+1 Show voters
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]

Nem elérhető buci11

  • 502
    • Profil megtekintése
Mik ezek? (MySQL)
« Válasz #7 Dátum: 2012. augusztus 20. - 15:29:49 »
0 Show voters
é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]);

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
Mik ezek? (MySQL)
« Válasz #8 Dátum: 2012. augusztus 20. - 15:53:56 »
+1 Show voters
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)

Nem elérhető buci11

  • 502
    • Profil megtekintése
Mik ezek? (MySQL)
« Válasz #9 Dátum: 2012. augusztus 20. - 18:09:05 »
0 Show voters
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 elérhető Csabesz

  • 7827
    • Profil megtekintése
Mik ezek? (MySQL)
« Válasz #10 Dátum: 2012. augusztus 20. - 18:56:31 »
+1 Show voters
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.

Mik ezek? (MySQL)
« Válasz #11 Dátum: 2012. augusztus 20. - 19:36:05 »
+2 Show voters
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`

Nem elérhető buci11

  • 502
    • Profil megtekintése
Mik ezek? (MySQL)
« Válasz #12 Dátum: 2012. augusztus 21. - 13:43:57 »
0 Show voters
Köszönöm szépen a válaszokat, zárom a témát és mindenkit felpontozok!

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal