MySQL | Schonender speichern

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
  • stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Adminlevel", SpielerInfo[playerid][pAdminlevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Banned", SpielerInfo[playerid][pBanned], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Skin", SpielerInfo[playerid][pSkin], "Name", SpielerInfo[playerid][pName]);
    }
    }
    return 1;
    }


    Die werden alle einzeln gespeichert, wie kann ichs umschreiben dass sie alle gleichzeitig gespeichert werden ?


    MFG

  • Arbeite mit strcat


    Beispiel

    new query[128], name[32]; // Query anpassen
    format(query, sizeof(query), "UPDATE `accounts` SET ");
    strcat(query, "Level = '%d', ", SpielerInfo[playerid][pLevel]);
    strcat(query, "Geld = '%d', ", SpielerInfo[playerid][pGeld]);
    //...
    format(name, sizeof(name), "WHERE Name = '%s'",SpielerInfo[playerid][pName]);
    strcat(query, name);
    mysql_query(query);


    Edit: Fehler ausgebessert.

  • Ich heute mit meinen Leichtsinnfehler....
    Sorry hier die Richtige Funktion....


    new mquery[512],query[128];
    strcat(mquery,"UPDATE `accounts` SET ");
    format(query,sizeof(query),"Level = '%d', ", SpielerInfo[playerid][pLevel]);
    strcat(mquery,query);
    format(query,sizeof(query),"Geld = '%d', ", SpielerInfo[playerid][pGeld]);
    strcat(mquery,query);
    format(query,sizeof(query),"Kills = '%d' ", SpielerInfo[playerid][pKills]); // bei der letzten Speicherung das "," weglassen
    strcat(mquery,query);
    // ...
    format(query,sizeof(query),"WHERE Name = '%s'", SpielerInfo[playerid][pName]);
    strcat(mquery,query);
    mysql_query(mquery);


    Zeit in ms: 2ms
    Deine Funktion: 54ms


  • dafuq .. es ist schon ein großer Unterschied, wenn das Script immer weiter wächst 8|
    Ich danke dir, ich werde das versuchen :)


    /e woher die genaue Zeit ? :D

  • Du musst einfach alles in einen Query packen, ist sehr simple,

    new Query[226];
    format(Query,sizeof(Query),"UPDATE `accounts` SET `Name` = '%s', `Level` = '%i',`Geld`='%i',`Kills`='%s',`Tode`='%s',`pJob`=%i,`Health`='%f',`Adminlevel`='%i',`Banned`='%i',`Skin`='%i' WHERE `Name` = '%s'",
    SpielerInfo[playerid][pName],SpielerInfo[playerid][pLevel],SpielerInfo[playerid][pGeld],SpielerInfo[playerid][pKills],SpielerInfo[playerid][pTode],SpielerInfo[playerid][pJob],SpielerInfo[playerid][pHealth],SpielerInfo[playerid][pAdminlevel],SpielerInfo[playerid][pBanned],SpielerInfo[playerid][pSkin],SpielerInfo[playerid][pName]);
    mysql_query(Query);


    Falls ein Fehler drinnen ist, bitte verbessern oder melden, habe es mal schnell geschrieben ohne drüber zu schauen.


    [LP]Tochnas
    Es ist bestimmt nicht sparrend für jede Variable strcat zu benutzen, messe mal deine Zeit beim speichern.


  • Deine Methode ist aber auch nicht optimal, man sollte alle sagen wir mal 30 Variablen eine neue Query machen, diese mit der alten zusammenfügen, da der Compiler bei einer langen Query rummukkt.

  • Blu3scReeN
    Ja, wenn er mehrere variablen hat soll er sie einfach via strcat zusammenfügen.
    Damit meine ich es so:

    new Query[500],MainQuery[1700];
    if(!IsPlayerConnected(playerid)) return 1;
    if(IsPlayerNPC(playerid)) return 1;
    if(GetPVarInt(playerid,"Eingeloggt") == 0) return 1;
    new oldtime = GetTickCount();
    GetPlayerPos(playerid,SpielerInfo[playerid][pLastX],SpielerInfo[playerid][pLastY],SpielerInfo[playerid][pLastZ]);
    GetPlayerFacingAngle(playerid,SpielerInfo[playerid][pLastA]);
    SpielerInfo[playerid][pInterior]=GetPlayerInterior(playerid);
    SpielerInfo[playerid][pVirtualworld]=GetPlayerVirtualWorld(playerid);

    format(Query,sizeof(Query),"UPDATE `accounts` SET `Name` = '%s', `pGeld` = '%i',`pSkin`='%i',`pFrakSkin`='%s',`pJobSkin`='%s',`pJob`=%i,`pFraktion`='%i',`pRang`='%i',`pAdminlevel`='%i',`pWanted`='%i',`pVerbrechen`='%i',`pKills`='%i',`pDeath`='%i',",
    SpielerInfo[playerid][pName],SpielerInfo[playerid][pGeld],SpielerInfo[playerid][pSkin],SpielerInfo[playerid][pFrakSkin],SpielerInfo[playerid][pJobSkin],SpielerInfo[playerid][pJob],SpielerInfo[playerid][pFraktion],SpielerInfo[playerid][pRang],SpielerInfo[playerid][pAdminlevel],
    SpielerInfo[playerid][pWanted],SpielerInfo[playerid][pVerbrechen],SpielerInfo[playerid][pKills],SpielerInfo[playerid][pDeath]);
    strcat(MainQuery,Query);
    strdel(Query,0,sizeof(Query));

    format(Query,sizeof(Query),"`pCuffed`='%i',`pHandschellen`='%i',`pCannabis`='%i',`pKokain`='%i',`pHeroin`='%i',`pC4`='%i',`pBombenguertel`='%i',`pMute`='%i',`pLastX`='%f',`pLastY`='%f',`pLastZ`='%f',`pPremium`='%i', `pLastA`='%f', `pExp`='%i',`pMaxExp`='%i' ,`pInterior`='%i',`pVirtualworld`='%i' WHERE `Name` = '%s'",
    SpielerInfo[playerid][pCuffed],SpielerInfo[playerid][pHandschellen],SpielerInfo[playerid][pCannabis],SpielerInfo[playerid][pKokain],SpielerInfo[playerid][pHeroin],SpielerInfo[playerid][pC4],SpielerInfo[playerid][pBombenguertel],SpielerInfo[playerid][pMute],SpielerInfo[playerid][pLastX],SpielerInfo[playerid][pLastY],
    SpielerInfo[playerid][pLastZ],SpielerInfo[playerid][pPremium],SpielerInfo[playerid][pLastA],SpielerInfo[playerid][pExp],SpielerInfo[playerid][pMaxExp],SpielerInfo[playerid][pInterior],SpielerInfo[playerid][pVirtualworld],SpielerInfo[playerid][pName]);
    strcat(MainQuery,Query);
    strdel(Query,0,sizeof(Query));

    mysql_query(MainQuery);
    strdel(MainQuery,0,sizeof(MainQuery));

    Ist nur ein kleiner Teil aus meinem alten Selfmade als Vorschau


    //e: Es ist außerdem r5 was ich eh nicht mehr benutzte, ich empfehle jedem BlueG r7 zu benutzen.
    //e2: Ich weiß das ich die Variablen unnötig gette, aber das Selfmade ist knapp ein halbes Jahr alt und da war ich noch bisschen unerfahrener.

  • Ist schon klar, es ging mir hier nur um die Übersicht, denn was bringts wenn er nur Copy & Paste macht und weiß net was er macht,
    bzw wofür die Funktion jetzt gut ist und was die auslöst. Durch rumfuchteln kommt man darauf :D Aber Trotzdem danke für die Erklärung