Datenbank frage

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 Leute
    ich suche nach einer lösung die Zeile zwischen 2 ids zu füllen



    Zwischen id 2 und 4 will ich id 3 erstellen


    Ich kriege er aber nur mit (INSERT INTO) an die letzte stelle also wenn 5 die letzte ist erstellt er id 6 obwohl id3 frei ist


    Wie mach ich das ?


    Danke im vorraus


    MFG

  • Nein, das geht so nicht.
    Du müsstest erst eine SELECT Abfrage machen, die die Tabelle ausliest, dann durchläufst du die Indizes und prüfst, wann ein Sprung kommt (von 2 auf 4 z.B.), sprich wann die momentane ID größer als die vorherige ID+1 ist.


    Dann machst du einen INSERT auf die vorherige ID+1.

  • komm nicht hinter mit dem was du von mir möchtest :/


    format(query,sizeof(query),"INSERT INTO hanf WHERE id IS NULL (drogenx,drogeny,drogenz,reife,ernte) VALUES ('%f','%f','%f','0','1') ",X,Y,Z);
    mysql_function_query(dbhandle,query,false,"","");


    habe es derzeit so und es wird nichts erstellt wie meinst du das jetzt genau ?

  • 1. Query:
    SELECT id FROM hanf;
    => mysql_function_query -> Dort eine Schleife durch die Anzahl der zurückgegebenen Rows machen und den Cache auslesen.


    new oldID, newID;
    for(new i = 0; i < rows; i++)
    {
    newID = cache_get_row_int(i, 0);
    if(newID > oldID + 1)
    {
    //2. Query: INSERT INTO hanf (id, etc...) VALUES (%d, etc...);
    break;
    }
    oldID = newID;
    }


  • ocmd:pflanzen(playerid, params[])
    {
    if(GetPlayerInterior(playerid) != 0)return SendClientMessage(playerid,Rot,"Du kannst hier keine Drogen pflanzen!");
    if(sInfo[playerid][samen]>=1)
    {
    new query[350];
    format(query,sizeof(query),"SELECT id FROM hanf");
    mysql_function_query(dbhandle,query,true,"Hanfid","i",playerid);
    }else{SendClientMessage(playerid,Weiss,"Du hast keine Samen mehr!");}
    return 1;
    }
    public Hanfid(playerid)
    {
    new oldID, newID;
    new num_fields,rows;
    cache_get_data(rows, num_fields, dbhandle);
    for(new i = 0; i < rows; i++)
    {
    newID = cache_get_row_int(i, 0);
    if(newID > oldID + 1)
    {
    new Float:X,Float:Y,Float:Z,query[350];
    GetPlayerPos(playerid,X,Y,Z);
    CreateObject(3409, X, Y, Z-2, 0, 0, 0, 75);
    sInfo[playerid][samen]=sInfo[playerid][samen]-1;
    format(query,sizeof(query),"INSERT INTO hanf (drogenx,drogeny,drogenz,reife,ernte) VALUES ('%f','%f','%f','0','1') ",X,Y,Z);
    mysql_function_query(dbhandle,query,false,"","");
    format(query,sizeof(query),"Hanfid: %i\nReifeprozes: %i",newID);
    Create3DTextLabel("Pflanzenid: %i\nReifeprozes: %i", 0x05C800FF, X, Y, Z-0.8, 7.0, 0);
    break;
    }
    oldID = newID;
    }
    return 1;


    }


    wo leigt der fehler er erstellt immer noch keine

  • Ändere
    format(query,sizeof(query),"INSERT INTO hanf (drogenx,drogeny,drogenz,reife,ernte) VALUES ('%f','%f','%f','0','1') ",X,Y,Z);
    zu
    format(query,sizeof(query),"INSERT INTO hanf (id, drogenx,drogeny,drogenz,reife,ernte) VALUES (%d, '%f','%f','%f','0','1') ",oldID+1,X,Y,Z);


    Ändere dann, da danach nichts mehr folgt, das
    break;in einreturn 1;


    und füge nach der Schleife, also direkt vor dem zweiten return 1 das ein:
    format(query,sizeof(query),"INSERT INTO hanf (id, drogenx,drogeny,drogenz,reife,ernte) VALUES (%d, '%f','%f','%f','0','1') ",oldID+1,X,Y,Z);
    mysql_function_query(dbhandle,query,false,"","");
    Damit auch ein Eintrag erstellt wird, wenn keine leere Zwischenzeile gefunden wurde.

  • Danke dir vielmals habe es jetzt hinbekommen :thumbup:



    Nächstest Problem beim laden


    er haut mir die ids von den pflanzen durch einander wo vorher hanfid 5 war ist jetzt aufeinmal 0 aber 0 ist trotdem als 5 gespeichert das weiß ich



    Gamemodeinit
    new query[120];
    format(query,sizeof(query),"SELECT * FROM hanf WHERE ernte='1'");
    mysql_function_query(dbhandle,query,true,"Hanfladen","");



    public Hanfladen(playerid)
    {
    new num_fields,num_rows,str[126];
    cache_get_data(num_rows, num_fields, dbhandle);
    for(new i=0; i<num_rows; i++)
    {
    HanfInfo[i][h_ID] = cache_get_field_content_int(i,"id",dbhandle);
    new hid=HanfInfo[i][h_ID];
    HanfInfo[hid][h_X] = cache_get_field_content_float(i, "drogenx", dbhandle);
    HanfInfo[hid][h_Y] = cache_get_field_content_float(i, "drogeny", dbhandle);
    HanfInfo[hid][h_Z] = cache_get_field_content_float(i, "drogenz", dbhandle);
    HanfInfo[hid][h_reif] = cache_get_field_content_int(i, "reif", dbhandle);
    HanfInfo[hid][h_reife] = cache_get_field_content_int(i, "reife", dbhandle);
    HanfInfo[hid][h_wasser] = cache_get_field_content_int(i, "wasser", dbhandle);
    HanfInfo[hid][h_Pflanze] = CreateObject(3409, HanfInfo[hid][h_X], HanfInfo[hid][h_Y], HanfInfo[hid][h_Z]-2, 0, 0, 0, 75);
    format(str,sizeof(str),"Hanfid: %i\nReif: %i g\nReifeprozess: %i % \nWasservorrat: %i %",hid,HanfInfo[hid][h_reif],HanfInfo[hid][h_reife],HanfInfo[hid][h_wasser]);
    HanfInfo[hid][h_Label] = Create3DTextLabel(str, 0x05C800FF, HanfInfo[hid][h_X], HanfInfo[hid][h_Y], HanfInfo[hid][h_Z]-0.6, 7.0, 0);
    }
    return 1;
    }

    Einmal editiert, zuletzt von Gurkie94 ()

  • Ändere
    format(str,sizeof(str),"Hanfid: %i\nReif: %i g\nReifeprozess: %i % \nWasservorrat: %i %",hid,HanfInfo[hid][h_reif],HanfInfo[hid][h_reife],HanfInfo[hid][h_wasser]);
    zu
    format(str,sizeof(str),"Hanfid: %i\nReif: %i g\nReifeprozess: %i % \nWasservorrat: %i %",HanfInfo[i][h_ID], HanfInfo[i][h_reif],HanfInfo[i][h_reife],HanfInfo[i][h_wasser]);


    Und ändere
    new hid=HanfInfo[i][h_ID];
    zu
    new hid=i;


    Oder ändere alle
    [hid]
    zu
    [i]


  • Wenn ich eine Pflanze ingame erstele gehen die Label weg sobalb ich diese update woran kann das liegen ?


    Hier mal der code wo das Label geupdatet wird.


    dürfte eigentlich ja kein fehler sein weil wenn ich es aus der datenbanklade sprich server starte klappt es auch also das Label verschwindet nicht.


    for(new i = 0; i < MAX_HANF; i++)
    {
    if(HanfInfo[i][h_wasser]>=1)
    {
    if(HanfInfo[i][h_reife]<100)
    {
    HanfInfo[i][h_reife]++;
    format(string,sizeof(string),"HanfID: %i\nReif: %i g\nReifeprozess: %i % \nWasservorrat: %i %",HanfInfo[i][h_ID],HanfInfo[i][h_reif],HanfInfo[i][h_reife],HanfInfo[i][h_wasser]);
    Update3DTextLabelText(HanfInfo[i][h_Label], 0x05C800FF, string);
    format(string,sizeof(string),"UPDATE hanf SET reife='%i'WHERE id='%i'",
    HanfInfo[i][h_reife],HanfInfo[i][h_ID]);
    mysql_function_query(dbhandle,string,false,"","");
    }
    if(HanfInfo[i][h_reife]==100)
    {
    HanfInfo[i][h_reife]=0;
    switch(random(10))
    {
    case 0:{HanfInfo[i][h_reif]=103;}
    case 1:{HanfInfo[i][h_reif]=125;}
    case 2:{HanfInfo[i][h_reif]=136;}
    case 3:{HanfInfo[i][h_reif]=142;}
    case 4:{HanfInfo[i][h_reif]=157;}
    case 5:{HanfInfo[i][h_reif]=169;}
    case 6:{HanfInfo[i][h_reif]=175;}
    case 7:{HanfInfo[i][h_reif]=181;}
    case 8:{HanfInfo[i][h_reif]=193;}
    case 9:{HanfInfo[i][h_reif]=273;}
    }
    format(string,sizeof(string),"HanfID: %i\nReif: %i g\nReifeprozess: %i % \nWasservorrat: %i %",HanfInfo[i][h_ID],HanfInfo[i][h_reif],HanfInfo[i][h_reife],HanfInfo[i][h_wasser]);
    Update3DTextLabelText(HanfInfo[i][h_Label], 0x05C800FF, string);
    format(string,sizeof(string),"UPDATE hanf SET reif='%i'WHERE id='%i'",
    HanfInfo[i][h_reif],HanfInfo[i][h_ID]);
    mysql_function_query(dbhandle,string,false,"","");
    }
    }
    if(HanfInfo[i][h_wasser]==0)
    {
    new query[150];
    HanfInfo[i][h_ID]=0;
    HanfInfo[i][h_reif]=0;
    HanfInfo[i][h_reife]=0;
    HanfInfo[i][h_wasser]=0;
    HanfInfo[i][h_X]=0;
    HanfInfo[i][h_Y]=0;
    HanfInfo[i][h_Z]=0;
    DestroyObject(HanfInfo[i][h_Pflanze]);
    Delete3DTextLabel(HanfInfo[i][h_Label]);
    mysql_format(dbhandle,query,sizeof(query),"DELETE FROM hanf WHERE id='%i'",i);
    mysql_function_query(dbhandle,query,false,"","");
    }
    }
    return 1;
    }


    ich denke mal das der fehler darin liegt wenn ich es erstelle oder irre ich mich ?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen