Globální moderátor HighPrint 177 Odesláno: 10. Srpen, 2011 Globální moderátor Share Odesláno: 10. Srpen, 2011 SQLite Zdravím pawneři, Slyšel jsem, že se tu dost povídá o dubd nebo dini, ale ještě jsem nikde u nikoho nezaslechl o systém SQLite. SQLite je tedy systém databáze přímo vložené do SAMP. Nejsou teda nutné k tomu mít žádné pluginy. Tyto databáze mají teda suffix .db a vytvářejí se ve složce scriptfiles. SQLite je v SAMP nedokonalé a způsobují lagy když je na serveru 30 a více hráčů (srovnáno s MySQL), ale stejně vás s tím seznámím. Takže jestli se rozhodnete pro SQLite nebo MySQL to je na vás, funguje vlastně stejně, takže by vás toto mohlo zajímat. Mám teda osobně zkušenosti s SQLite a nemyslím si, že to je až tak špatné, pokud s tím umíte dobře pracovat. V tomhle TuTu vás jenom seznámím se základníma věcmi, takže jestli máte o tom hlubší zájem, tak je třeba najít nějaké weby co se zabývá přímo SQLite. Možná nevýhodou je, že pokaždé když chcete upravovat nějaké data, musíme mít SQLite EDITOR. Nenutím vás toto teda používat, je to jen aby jste také věděli, že něco takového v SAMP je. Jestli stále chcete zůstat u starého způsobu zapisování do souboru tak doporučuji QINI od QWERa. V SQL editoru to potom bude vypadat nějak takto: Při vytváření databáze se používá prefix "DB". Dále existuje pro SQLite prefix "DBResult", což ukládá výsledky vyvolání dotazu. Takže pro vytvoření databáze bude něco takového: new DB:database; // vytvoření databáze new DBResult:result; // vytvoření resultu, později vám ukážu na příkladě Funkce V SAMP SQLite má přesně 10 funkcí. Tady máte pojmy, příklady jsou na wiki db_open(nazev[]) - Tato funkce otevírá "nazev" databázi, nejlépe se doporučuje hned při spuštění, takže OnGMInit/OnFSInit db_close(nazev[]) - Tato funkce uzavře, takže zase, doporučuje se při OnGMExit/OnFSExit db_free_result(DBResult:result) - Jak bych vám to řekl, uvolní prostě dotaz, který jste vyvolal. db_num_rows(DBResult:result) - Tato funkce vám napíše kolik řádků (výsledků) to našlo v databázi při daném dotazu. db_num_fields(DBResult:result) - To samé jako horní funkce, akorát zjišťuje pole v jednom řádku. db_next_row(DBResult:result) - Šoupne to na další řádek (výsledek), při daném vyvolaném dotazu db_fieldname(DBResult:result, field, str[], maxlength) - Vrací jméno pole z výsledku na daném dotazu. db_get_field(DBResult:result, field, str[], maxlength) - Zjistí hodnotu v daném poli. Db_get_field_assoc(DBResult:result, const field[], str[], maxlen) - Zjistí zase hodnotu z pole přes název. To horní bylo přes ID pole, teď přes jména pole. Db_get_field_assoc(DBResult:dbresult, const field[], str[], maxlen) - Zjistí zase hodnotu z pole přes název. To horní bylo přes ID pole, teď přes jména pole. db_query(DB:db, query[]) - Tahle funkce je teda asi nejvíc použivaná vzhledem k tomu, že to je funkce, která vyvolá dotaz. Začínáme s naší první databázi a tabulkou new DB:database; // nadefinovali jsme tedy databázi s jménem database Máme teda vytvořenou databázi, resp. název ze kterého budeme využívat celý tento SQLite v pawnu. Nyní tuto databázi musíme nějak otevřít, takže půjdeme jak jsem se už nahoře zmínil, v OnGMinit/OnFSInit. database = db_open("data.db"); // do database jsme vložili ID "data.db", které se bude nacházet ve složce ScriptFiles Takže jsme už vytvořili naši databázi, není třeba ji nějak vytvořit předem, tato funkce ji vytvoří samo. Problém je teď, že v té databázi je prázdno. Takže pod tím vyvoláme dotaz, které nám pomůže vytvořit tabulku v databázi. new DBResult: result; result = db_query(database,"CREATE TABLE IF NOT EXISTS Tabulka1 (Nick VARCHAR(25),AdminLevel INTEGER, Kills INTEGER, Death INTEGER)");// Takže si nejdřív vysvětlíme co to je CREATE TABLE IF NOT EXISTS, znamená to, že vám to vytvoří tabulku v databázi, když neexistuje. Takže se to vykoná jen jednou vlastně. Další věc, VARCHAR nám označuje teda znaky, a v závorce počet znaků. INTEGER je tedy číselný data typ. Výborně, takže máme naši první tabulku. Akorát zase, je prázdná, je tam jen struktura tý tabulky, ale nemáme v tom žádné data. Nakonec jen doplníme. Dále máme tam DBResult, což nám umožňuje další věci, například zjistit, jestli tento kód provedl. if(!result) printf("Tento SQL Dotaz se neprovedl!"); Další krok, vyprázdníme result, takže použijeme funkci db_free_result db_free_result(result); Data types Data typy jsou teda typy, které je třeba nastavit při vytváření tabulky, takže vás teda s nějakýma také seznámím, alespoň ty které se využívají běžně. INTEGER - už z názvu se bude jednat o integer. FLOAT - desetinné čísla. BOOLEAN - true/false, v databázi se ukládá jako 1/0 TIME - čas TIMESTAMP - vyvolá se přesný čas, kdy to zaregistruje vytvoření nového řádku. VARCHAR(x) - počet znaků dosažené v x. TABLE Statements Momentálně teda něco řeknu, příklady tu snad nebudou to si domyslete už sami. CREATE TABLE Jak jsem dřív řekl, to teda vytvoří tabulku. Původní syntax CREATE TABLE-u je CREATE TABLE tabulka (pole1...pole9999) ALTER TABLE Toto se teda používá k upravování existujicí tabulky, například jestli chcete pojmenovat jinak, přidat další pole, smazat existujicí pole atd. Tady asi bude třeba příklady aby jste tomu nějak porozuměli Příklady: ALTER TABLE Tabulka1 RENAME TO SuperTabulka; ALTER TABLE Tabulka1 ADD PlayTime INTEGER ALTER TABLE Tabulka1 MODIFY pole1 DataTyp // s tímto bohužel nemám zkušenosti. ALTER TABLE Tabulka1 DROP COLUMN Deaths; Vysvětlení: První příklad nám tedy z Tabulka1 přejmenuje na SuperTabulka, Druhý příklad nám označuje přidání pole PlayTime s data typem INTEGER, bohužel teď nevím k čemu je teda MODIFY, nikdy jsem to nepoužíval a nemůžu k tomu teda nic říct. Podle webu to jen změní datatyp. Poslední příklad nám teda smaže pole Deaths z tabulky Tabulka1 DROP TABLE Takže jen dodám, že toto klíčové slovo vám smaže tabulku z databáze. Statements Takže něco si řekneme o tomto, důležité je teda v pawnu vědět jen o pár klíčových slovech SELECT, INSERT, DELETE, UPDATE SELECT tedy pomáhá brát data z jednoho nebo více tabulek. Syntax SELECTu vypadá asi takto: "SELECT pole FROM tabulka WHERE podleceho". Teď vám ukážu pár příkladů, které bude navazovat na naší první tabulku. Příklady: SELECT * FROM Tabulka1 WHERE Nick='_NTP_HighPrint' SELECT AdminLevel FROM Tabulka1 WHERE Nick='_NTP_HighPrint' SELECT AdminLevel, Kills FROM Tabulka1 WHERE Nick='_NTP_HighPrint' [color=#FF0000]POZOR:[/color] SELECT Tabulka1.AdminLevel, Tabulka2.Neco FROM Tabulka1, Tabulka2 WHERE Nick='_NTP_HighPrint' Vysvětlení: v prvním příkladu jsem tedy dal místo názvů polí hvězdičku, což znamená, že to bere vše co je v tom řádku s nickem _NTP_HighPrint, tedy v tomto případě nám bere Kills, AdminLevel, Nick a Deaths. Druhý příklad, to jsme vzali jen jedno pole což je AdminLevel. Další příklad je stejný, ale to nám bere 2 pole. A k poslednímu příkladu, to je tedy takovej speciální příklad, kde nám umožňuje vzít data z obou tabulek s jedním WHERE (nvm teď jak to nazvat). INSERT Klíčové slovo INSERT nám umožňuje vložit do databáze jednu nebo více dat. Syntax INSERTu je INSERT INTO tabulka (pole,pole2,pole3..pole999) VALUES (hodnota-pole,hodnota-pole2,hodnota-pole3...hodnota-pole999). Příklad: INSERT INTO Tabulka1 (Nick,AdminLevel,Kills,Death) VALUES ('_NTP_HighPrint',5,9999,0); Vysvětlení: Hmm, vloží teda do tabulky Tabulka1 hodnoty, jak vidíte nahoře, stringy se vždy dávají do ' ', a číselné hodnoty bez toho. Takže jsme vytvořili řádek s Nickem _NTP_HighPrint, Adminlevelem 5, Kills 9999 a Umrtí 0 UPDATE Klíčové slovo UPDATE nám umožňuje aktualizovat hodnoty v dané tabulce. Syntax UPDATE-u je tedy takto: UPDATE tabulka SET pole WHERE neco Příklad: UPDATE Tabulka1 SET AdminLevel=6 WHERE Nick='_NTP_HighPrint' Vysvětlení: Takže jsme aktualizovali AdminLevel hráče s nickem _NTP_HighPrint na 6. Co na to dodat k tomuhle. DELETE Toto klíčové slovo nám umožňuje teda smazat jedno nebo více řadů z naší tabulky. Syntax tohoto klíčového slova je: DELETE FROM tabulka WHERE neco Příklad: DELETE FROM Tabulka1 WHERE Nick='_NTP_HighPrint' Vysvětlení: No snad toto je nejlehčí z klíčových slov, takže k tomu asi nemusím nic dodat, to snad už chápete. Jak jste si asi všimli, u každých klíčových slov je vždy WHERE na konci. WHERE je tedy dodatek k SQL dotazu a to nám umožňuje filtrovat výsledek dotazu z klíčových slov. Takže to je snad vše . Z těchle věcí, byste mohli být schopni udělat registrační systém přes SQLite, ukládání a přepisování. Takže zatím hodně štěstí. Jestli jste něčemu nerozuměli, neváhejte napsat. Jestli jste se s tímhle už seznámili, a víte, že mi něco chybí nebo mám špatně, tak mi to tady dole můžete opravit. 2 Link to comment Share on other sites More sharing options...
Guest Odesláno: 10. Srpen, 2011 Share Odesláno: 10. Srpen, 2011 very nice 11/10 ! Link to comment Share on other sites More sharing options...
Brunes 1 Odesláno: 10. Srpen, 2011 Share Odesláno: 10. Srpen, 2011 vyzerá zo upne super! 10/10!! -- stř 10. srp 2011 13:10:59 -- vyzerá zo uplne super! 10/10!! Link to comment Share on other sites More sharing options...
Guest Odesláno: 10. Srpen, 2011 Share Odesláno: 10. Srpen, 2011 tak toto je nádhera HP :-) moje hodnotenie myslím poznáš :-) Link to comment Share on other sites More sharing options...
Guest Odesláno: 10. Srpen, 2011 Share Odesláno: 10. Srpen, 2011 Hezkej TuToriál. Jen je fakt že to laguje při 30+ hráčích .. 10+/10 Link to comment Share on other sites More sharing options...
Lemon 0 Odesláno: 11. Srpen, 2011 Share Odesláno: 11. Srpen, 2011 10/10 nice Link to comment Share on other sites More sharing options...
Globální moderátor HighPrint 177 Odesláno: 11. Srpen, 2011 Author Globální moderátor Share Odesláno: 11. Srpen, 2011 Thx all , snad jste to fakt četli a naučili se něco nového Link to comment Share on other sites More sharing options...
Guest Frodo Odesláno: 11. Srpen, 2011 Share Odesláno: 11. Srpen, 2011 Návod pěkný :thumbup:, ale podle mě to tady nikdo nevyužije (krom toho že bude vědět o čem je SQLite apd.), protože jak sám jsi řekl, laguje to při těch 30 hráčích a navíc, kdo nemá zkušenosti s SQL tak mu to příjde až moc složitý. Link to comment Share on other sites More sharing options...
Globální moderátor HighPrint 177 Odesláno: 11. Srpen, 2011 Author Globální moderátor Share Odesláno: 11. Srpen, 2011 Vyvolané 100 dotazů na dané klíčové slovo INSERT: 5715ms SELECT: 13ms (beze filtru WHERE je stejný výsledek) UPDATE: 53ms (beze filtru WHERE 6079ms) DELETE: 42ms (beze filtru WHERE 5934ms) Takže to je poměrně rychlé, vzhledem k tomu, že INSERT se vyvolá jen jednou za čas třeba při registru. A navíc nějak mě překvapuje, že beze filtru to trvá déle než s filtrem Link to comment Share on other sites More sharing options...
_Martin_ 10 Odesláno: 8. Říjen, 2011 Share Odesláno: 8. Říjen, 2011 Je možné to použiť aj na čítanie na webe..napr. keby chcem profil na webe tak či je to schopné nejako vyčítať // Viem, že je to stará téma ale nebudem zakladať novú Link to comment Share on other sites More sharing options...
DooM 93 Odesláno: 8. Říjen, 2011 Share Odesláno: 8. Říjen, 2011 Ty kravo tak tomu rikam TUT 20/10 Jak dlouho si to psal? Link to comment Share on other sites More sharing options...
Guest Frodo Odesláno: 8. Říjen, 2011 Share Odesláno: 8. Říjen, 2011 MartiN":47itpdq5]Je možné to použiť aj na čítanie na webe..napr. keby chcem profil na webe tak či je to schopné nejako vyčítať // Viem, že je to stará téma ale nebudem zakladať novú Melo by to jit:) Link to comment Share on other sites More sharing options...
_Killer_ 1 Odesláno: 8. Říjen, 2011 Share Odesláno: 8. Říjen, 2011 Krásny TUT ! PS: Skoda že už nerobím s pawnom Link to comment Share on other sites More sharing options...
_Martin_ 10 Odesláno: 8. Říjen, 2011 Share Odesláno: 8. Říjen, 2011 MartiN":3uumhgnl]Je možné to použiť aj na čítanie na webe..napr. keby chcem profil na webe tak či je to schopné nejako vyčítať // Viem, že je to stará téma ale nebudem zakladať novú Melo by to jit:) Uhm a si schopný mi to nejako popísať ? Link to comment Share on other sites More sharing options...
Guest Frodo Odesláno: 8. Říjen, 2011 Share Odesláno: 8. Říjen, 2011 MartiN":96yeb6ds] MartiN":96yeb6ds]Je možné to použiť aj na čítanie na webe..napr. keby chcem profil na webe tak či je to schopné nejako vyčítať // Viem, že je to stará téma ale nebudem zakladať novú Melo by to jit:) Uhm a si schopný mi to nejako popísať ? No.. princip je takový, že přečteš obsah .db souboru a s ním pak pracuješ v PHP.. zbytek je na tobě Neumím s tím, ani jsem to nijak zvlášť nestudoval. :wtf: Link to comment Share on other sites More sharing options...
Administrátor Ewwe 434 Odesláno: 8. Říjen, 2011 Administrátor Share Odesláno: 8. Říjen, 2011 MartiN":g4uapclf] MartiN":g4uapclf]Je možné to použiť aj na čítanie na webe..napr. keby chcem profil na webe tak či je to schopné nejako vyčítať // Viem, že je to stará téma ale nebudem zakladať novú Melo by to jit:) Uhm a si schopný mi to nejako popísať ? No.. princip je takový, že přečteš obsah .db souboru a s ním pak pracuješ v PHP.. zbytek je na tobě Neumím s tím, ani jsem to nijak zvlášť nestudoval. :wtf: V PHP ? snad v PWN ne? Link to comment Share on other sites More sharing options...
Globální moderátor HighPrint 177 Odesláno: 8. Říjen, 2011 Author Globální moderátor Share Odesláno: 8. Říjen, 2011 Thx to all Ty kravo tak tomu rikam TUT 20/10 Jak dlouho si to psal? Co já vím, asi hodinu? MartiN":3d50z12w]Je možné to použiť aj na čítanie na webe..napr. keby chcem profil na webe tak či je to schopné nejako vyčítať // Viem, že je to stará téma ale nebudem zakladať novú Je to možné , nezkoušel jsem to, ale zkusit to mohu Link to comment Share on other sites More sharing options...
Guest Odesláno: 8. Říjen, 2011 Share Odesláno: 8. Říjen, 2011 Ešte by si mohol spraviť tut na registráciu cez SQLite Link to comment Share on other sites More sharing options...
Ivo Král 0 Odesláno: 8. Říjen, 2011 Share Odesláno: 8. Říjen, 2011 Kousnu tě Link to comment Share on other sites More sharing options...
Brunes 1 Odesláno: 8. Říjen, 2011 Share Odesláno: 8. Říjen, 2011 tu registraciu inač by si mohol spraviť ako príklad :DD Link to comment Share on other sites More sharing options...
Globální moderátor HighPrint 177 Odesláno: 9. Říjen, 2011 Author Globální moderátor Share Odesláno: 9. Říjen, 2011 Vždyť pokud pochopíte jak to funguje tak není složité udělat registračku. Jako můžu to udělat no, ale je to popsané tak aby pokročilý mohli z toho udělat registračku Až budu mít čas tak to sem šoupnu Otravováním na SZ Nepomůže!! Link to comment Share on other sites More sharing options...
Guest Frodo Odesláno: 9. Říjen, 2011 Share Odesláno: 9. Říjen, 2011 V PHP ? snad v PWN ne? Otázka zněla Je možné to použiť aj na čítanie na webe..? Link to comment Share on other sites More sharing options...
Guest Odesláno: 9. Říjen, 2011 Share Odesláno: 9. Říjen, 2011 Vždyť pokud pochopíte jak to funguje tak není složité udělat registračku. Jako můžu to udělat no, ale je to popsané tak aby pokročilý mohli z toho udělat registračku Až budu mít čas tak to sem šoupnu Otravováním na SZ Nepomůže!! si si istý ? btw ja som na ofik fore našiel registráciu... ale ja ju chcem od teba :-* (btw aj tak SQLite nepoužijem xD) Link to comment Share on other sites More sharing options...
Angelus 3 Odesláno: 12. Říjen, 2011 Share Odesláno: 12. Říjen, 2011 Ešte by si mohol povedať o používaní AND a OR (a pokiaľ sú, tak aj ďalšie) pri WHERE, lebo je to dosť dôležité pri Login-e v registračke. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now