Neues R7 Mysql Plugin

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo ich versuche gerade mit dem neuen Mysql Plugin von Blue G zu arbeiten das Mysql R7 Plugin doch ich komme nicht weiter wie funktioniert es weiter ich hab über das tutorial hier im forum es schonmal soweit gebracht:



    dazu nochmal mein enum:


    ist es so okay oder kann man es verbessern evtl server schonender scripten ? und was fehlt ich komm da nicht ganz weiter wie Setz ich das jetzt in mein enum ein (z.bSpielerInfo[playerid][pLevel])?


    würde mich über jede hilfe freuen danke schonmal im vorraus


    //edit auf goldkiller's anweisung nochmal überarbeitet war nur versehendlich

    Einmal editiert, zuletzt von janpplayer ()

  • Deinen Query solltest du so schreiben:


    public LoadQuery(playerid)
    {
    new savedata[512];
    for(new i; i!=41; i++) cache_get_row(0,i,savedata);
    return 1;
    }


    Dann musst du das nicht 41x auflisten ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Kannst dir ja mal dieses Tutorial annsehen:
    http://forum.sa-mp.de/san-andr…nktionen-threaded-querys/



    cache_get_row(0,30,savedata);
    Du lädst hier nur den Inhalt des Feldes mit dem Index 30 in die Variable savedata. Du müsstest es aber noch in deine Variable schieben.
    new einezahl = strval(savedata);
    Du solltest nochmal einen Blick auf deinen Startpost werfen,da stimmt der Code hinter "dazu nochmal mein enum:" nicht.

  • muss ich es immer einzelnd damit meine ich so


    Code
    cache_get_row(0,29,savedata);
    SpielerInfo[playerid][pBank]=strval(savedata);
    cache_get_row(0,30,savedata);
    SpielerInfo[playerid][pTelefon]=strval(savedata);
    usw....


    oder kann man die Tabelle nicht so ordnen wie das Enum und gibt dann nur SpielerInfo[playerid] an?


    ich will es möglichst serverschonend und übersichtlich gestalten...


    //edit Ich habe mir das Tutorial ja schon angesehen komme noch nicht ganz klar aber das was ich bis jetzt hab, hab ich von da

  • Anscheinend geht es nicht anders.


    Zitat

    oder kann man die Tabelle nicht so ordnen wie das Enum und gibt dann nur SpielerInfo[playerid] an?


    Könnte man sich selber so ausgeben lassen,ist aber etwas umständlich mMn und ist auch nicht besser was "serverschonend" oder "übersichtlich" betrifft

  • Anscheinend geht es nicht anders.



    Könnte man sich selber so ausgeben lassen,ist aber etwas umständlich mMn und ist auch nicht besser was "serverschonend" oder "übersichtlich" betrifft


    Mann könnte es optimieren und zwar alles daten bis auf den namen und das passwort zum vergleichen in zwei extra spalten und die anderen sachen alles in eine Spalte rein hauen als
    string um den auszulesen und anschließend zu splitten mit sscanf.


    da wenn man sich die speedtest mal anschaut



    Exactly as Burridge said. A call to sscanf to parse the line is faster than using cache_get_row the amount of times necessary, but the sscanf-solution also requires mysql_fetch_row, which takes an extra array (string) to fetch the data into first and then parse from it. With caching, the plugin stores the data internally in a vector and for some reason, such code is faster.



    quelle


    http://forum.sa-mp.com/showpost.php?p=1827054&postcount=6


    wie man hier raus übernehmen kann braucht ist sscanf in der verwendung schneller als das einzelne auslesen der einzelnen spalten und dazu zählt noch das umkonvertieren in
    ein integer oder in eine float.


    oder wie siehst du dies Goldkiller ?


    //edit


    Jan dein code ist nicht richtig du hast nur den string ^^ diesen solltest du auch jeweils kovertieren. ( Post 1 betreffend)
    und ein kleiner tipp zum auslesen von strings.
    Beispiel:

    Code
    cache_get_row(0,40,SpielerInfo[playerid][pAfkGrund]);


    und wie es goldkiller schon geschrieben hatte musst du den string umkonvertienen
    so wie du es dann machen wolltest stimmt. Das umkonvertieren gilt jedoch nicht für strings sie beispiel(Post 3 von dir betreffend)

  • also werde ich das ganze mit sscanf splitten richtig`?
    aber die funktion mit cache muss ich eingeschaltet lassen oder?


    mein query muss ich dann also unverändert lassen nur in der public LoadQuery mit sscanf arbeiten oder?

  • also werde ich das ganze mit sscanf splitten richtig`?
    aber die funktion mit cache muss ich eingeschaltet lassen oder?


    mein query muss ich dann also unverändert lassen nur in der public LoadQuery mit sscanf arbeiten oder?


    es ist eine möglich methode um noch ein bissle di eleistung zu steigern meiner ansicht nach , jedoch nicht wirklich notwendig bring erstmal dein
    speichersystem fertig dann kannst du immer noch schauen ^^.


    Zur ersten frage lass diese variante erstmal bleiben und verwende das plugin auf herkömmlichen Art und Weise mit dem umkonvertieren
    des strings


    ich ziehe nochmal beispiele auf



    cache_get_row(0,29,savedata);
    SpielerInfo[playerid][pBank]=strval(savedata);
    cache_get_row(0,30,savedata);
    SpielerInfo[playerid][pTelefon]=strval(savedata);
    cache_get_row(0,40,SpielerInfo[playerid][pAfkGrund]);
    cache_get_row(0,41,savedata);
    SpielerInfo[playerid][pArmor]=floatstr(savedata);


    zu dem möchte ich noch ergänzen das beispiele sind also die spalten nicht beachten ^^
    wenn du dir das ganze mal anschauen willst ein kleines register- und loginsystem
    siehe hier


    http://gtawerk.de/Datenbank/in…age=Category&categoryID=3

  • #define ACCLADEN sscanf(savedata,"p<|>e<"Deine Variablen">","Dein Enum");


    das define könntest du nicht mal nutzen so wie du es definiert hast
    und wer lesen kann ist klar im vorteil


    Zitat


    Wenn du mit sscanf arbeiten willst musst du wie ich es gesagt habe die meisten Werte in einer Spalte unterbringen als string
    den du danach ausließt und splittest.

  • die cache funktion ist ja dafür gedacht um es schneller zu laden aber sscanf ist doch schneller oder soll ich das passwort die benutzerid und den namen mit cache laden und den rest normal und dann mit sscanf splitten? welches ist am besten (schnellsten,übersichtlichsten,serverschonensten)


    edit etwas hinzugefügt

    Einmal editiert, zuletzt von janpplayer ()