[MYSQL]Letze ID der Tabelle

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
  • Kannst doch auch einfach in der MySQL Datenbank bei der Spalte mit den ID's das "Auto-Increment" einschalten.


    Dann zählt er immer wenn eine neue Zeile in die Tabelle reingeschrieben wird die ID hoch. So ist jede einzigartig. Das ist doch der Effekt den du willst oder?


    //Edit: Rechtschreibfehler behoben

    Einmal editiert, zuletzt von DraloX ()

  • Habs nun so
    Wenn ich auf den Server gehe und gleich wieder leave updatet er mein ACC normal
    Wenn ich auf den Server gehe und mit /auto ein car spwne und dann leave ist das problem da


    bei FahrzeugID ist nun "Auto-Increment" aktiviert
    Befehl geupdated



    if(strcmp(cmd, "/auto", true)==0)
    {
    if(Account[playerid][pAdmin] == 3)
    {
    new modelid,c1,c2,mystr[128];
    new Float:isx,Float:isy,Float:isz;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Farbe1] [Farbe2]");
    return 1;
    }
    modelid = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Farbe1] [Farbe2]");
    return 1;
    }
    c1 = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Farbe1] [Farbe2]");
    return 1;
    }
    c2 = strval(tmp);
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    SCM(playerid,COLOR_LIGHTRED," Auto erstellt ");
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    GPP(playerid,Float:isx,Float:isy,Float:isz);
    new count = mysql_query("SELECT MAX(`FahrzeugID`) FROM autos");
    printf("%d count",count);
    Autos[count][vModel] = modelid;
    Autos[count][vEingepackt] = 0;
    Autos[count][vArt] = 0;
    Autos[count][vX] = isx;
    Autos[count][vY] = isy;
    Autos[count][vZ] = isz;
    Autos[count][vA] = 0;
    Autos[count][vFarbe1] = c1;
    Autos[count][vFarbe2] = c2;


    format(mystr,sizeof(mystr),"UPDATE autos SET Model='%d' WHERE FahrzeugID='%d'",Autos[count][vModel],count);mysql_query(mystr);
    CreateVehicle(modelid,isx,isy,isz,0,c1,c2,-1);
    OnVehicleDataUpdate(count);
    }
    else
    {
    SCM(playerid, COLOR_RED, "Du bist kein Admin!");
    return 1;
    }
    return 1;
    }



    Einmal editiert, zuletzt von Tomi93 ()

  • MySQL bietet diese Funktion doch eig. schon. Das heißt du musst im Script GARKEINE ID festelegen. Das macht der MySQL Server. Ansonsten hab ich deine Frage wohl falsch verstanden^^


    //Edit:


    Bei mir sieht das dann so aus:


    In der Tabelle hab ich folgende Spalten: ID,Name,Model,X,Y,Z,Preis,SellPreis.


    Wenn ich dann Ingame das Auto abspeicher schreib ich nur Name,Model,X,Y,Z,Preis und SellPreis in die Tabelle rein. Die ID schriebt der MySQL Server automatisch rein und erhöht diese bei jedem Eintrag um eine bestimmte Zahl (Selbst festlegbar. Standart ist 1). Dadurch hat jedes Auto das ich erstelle eine einzigartige ID.

  • Dralox ich will doch nicht mit dem Script eine ID festlegen jedoch brauche ich eine ID um die Variablen zu benutzen damit er letztendlich die model id etc. auch dem richtigem Fahrzeug zufügt und nicht irgendeinem


    //Update:
    Habs nun so
    Wenn ich auf den Server gehe und gleich wieder leave updatet er mein ACC normal
    Wenn ich auf den Server gehe und mit /auto ein car spwne und dann leave ist das problem da


    bei FahrzeugID ist nun "Auto-Increment" aktiviert
    Befehl geupdated



    if(strcmp(cmd, "/auto", true)==0)
    {
    if(Account[playerid][pAdmin] == 3)
    {
    new modelid,c1,c2,mystr[128];
    new Float:isx,Float:isy,Float:isz;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Farbe1] [Farbe2]");
    return 1;
    }
    modelid = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Farbe1] [Farbe2]");
    return 1;
    }
    c1 = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Farbe1] [Farbe2]");
    return 1;
    }
    c2 = strval(tmp);
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    SCM(playerid,COLOR_LIGHTRED," Auto erstellt ");
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    GPP(playerid,Float:isx,Float:isy,Float:isz);
    new count = mysql_query("SELECT MAX(`FahrzeugID`) FROM autos");
    printf("%d count",count);
    Autos[count][vModel] = modelid;
    Autos[count][vEingepackt] = 0;
    Autos[count][vArt] = 0;
    Autos[count][vX] = isx;
    Autos[count][vY] = isy;
    Autos[count][vZ] = isz;
    Autos[count][vA] = 0;
    Autos[count][vFarbe1] = c1;
    Autos[count][vFarbe2] = c2;


    format(mystr,sizeof(mystr),"UPDATE autos SET Model='%d' WHERE FahrzeugID='%d'",Autos[count][vModel],count);mysql_query(mystr);
    CreateVehicle(modelid,isx,isy,isz,0,c1,c2,-1);
    OnVehicleDataUpdate(count);
    }
    else
    {
    SCM(playerid, COLOR_RED, "Du bist kein Admin!");
    return 1;
    }
    return 1;
    }

  • Sicher das count die richtige ID ausgibt? Du fragst ja die Größte ID ab die in der Tabelle existiert, müsstest aber dann nochmal +1 dazu rechnen damit du die Nächste freie ID bekommst die du belegen kannst. Für mich sieht das so aus als würdest du kein Neues auto erstellen, sondern immer das auto mit der Größten ID das in der tabelle bereits existiert verändern.


    BTW: Würd ich ein neues fahrzeug anders in der Tabelle speichern:
    format(query, sizeof(query), "INSERT INTO autos (FahrzeugID, Model, Eingepackt, Art, X, Y, Z, A, Farbe1, Farbe2) VALUES ('%d', '%d', '0', '0', '%.1f', '%.1f', '%.1f', '0', '%d', '%d')", count+1, modelid, isx, isy, isz, c1, c2);
    mysql_query(query);

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • count gibt i-wie immer 1 zurück obwohl in der Tabelle noch kein Eintrag ist müsste dann nicht normal als erstes 0 raus kommen?
    Ist das so besser?
    aber laut mysql log kann er die ID noch erfolgreich bekommen nur beim einfügen oder Updaten kommen dann diese Fehler aber erst
    nach dem ich min. 1 Auto mit /auto erstellt habe


    if(strcmp(cmd, "/auto", true)==0)
    {
    if(Account[playerid][pAdmin] == 3)
    {
    new modelid,c1,c2,mystr[128];
    new Float:isx,Float:isy,Float:isz;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Farbe1] [Farbe2]");
    return 1;
    }
    modelid = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Farbe1] [Farbe2]");
    return 1;
    }
    c1 = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SCM(playerid, COLOR_WHITE, "Benutze: /auto [modelid] [Farbe1] [Farbe2]");
    return 1;
    }
    c2 = strval(tmp);
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    SCM(playerid,COLOR_LIGHTRED," Auto erstellt ");
    SCM(playerid,COLOR_GREEN,"/////////////////////////////////////////////////");
    GPP(playerid,Float:isx,Float:isy,Float:isz);
    new count = mysql_query("SELECT MAX(`FahrzeugID`) FROM autos");
    printf("%d count",count);
    Autos[count][vModel] = modelid;
    Autos[count][vEingepackt] = 0;
    Autos[count][vArt] = 0;
    Autos[count][vX] = isx;
    Autos[count][vY] = isy;
    Autos[count][vZ] = isz;
    Autos[count][vA] = 0;
    Autos[count][vFarbe1] = c1;
    Autos[count][vFarbe2] = c2;


    format(mystr, sizeof(mystr), "INSERT INTO autos (FahrzeugID, Model, Eingepackt, Art, X, Y, Z, A, Farbe1, Farbe2) VALUES ('%d', '%d', '0', '0', '%.1f', '%.1f', '%.1f', '0', '%d', '%d')", count+1, modelid, isx, isy, isz, c1, c2);
    mysql_query(mystr);
    CreateVehicle(modelid,isx,isy,isz,0,c1,c2,-1);
    }
    else
    {
    SCM(playerid, COLOR_RED, "Du bist kein Admin!");
    return 1;
    }
    return 1;
    }

  • Man brauch ne eindeutige ID in der Datenbank und nicht nur die Auto_Increment Felder.
    Stell dir mal vor du löscht eins mittendrinne, und du iwann an die 2000er marke kommst, dann willst du welche auf den gelöschten feldern adden und schon verschiebt sich dein schönes System...

  • 8D ich werde keine Cars löschen das mit dem ID verschieben kenn ich schon daher werden keine Cars gelöscht nur manuell oder IG editiert :D


    Ich bräuchte jetzt nun so langsam mal ein voll funktionis fähigs Vehicle System per MYSQL


    Also Laden
    Erstelen per CMD
    und Updaten o.o


    //Edit INk
    Editierregel beachten, sonst Warn!


    //Edit:
    Habe nun den Fehler wegbekommen nun setzt er wenn ich /auto benutze auch das Auto in die Table jedoch klappt die ID abfrage nicht und das Fahrzeug wird ständig überschrieben warum?
    new count = mysql_query("SELECT MAX(`FahrzeugID`) FROM autos");
    count= count+1;
    printf("%d count",count);
    mysql_store_result();mysql_free_result();



    4 Mal editiert, zuletzt von Tomi93 ()