[MySQL] Alle id durchlaufen und fehlenden ergänzen

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 Community


    ich wusste jetzt nicht wie ich den Titel nennen soll deshalb habe ich das mal versucht.
    Zu meinem Problem wie kann ich die ID's durchlaufen lassen, wenn aber eine ID nicht drine ist also so:


    1
    2
    4
    5
    Soll er mir die ID ausgeben die nicht vorhanden ist.


    Habe es mal früher so gemacht:

    stock FreeFrakCheck()
    {
    new bedin[128],query[128];
    for(new i;i<MAX_FRACTION_CARS;i++)
    {
    format(bedin,sizeof(bedin),"id='%i'",i);
    format(query,sizeof(query),"SELECT * FROM frakcars WHERE %s",bedin);
    mysql_query ( query );
    mysql_store_result();
    if(mysql_retrieve_row()==0) return i;
    }
    return 0;
    }




    Jedoch klappt diese Funktion nicht mehr mit der neuen MySQL Version. (R35)
    Kann mir jemand zeigen wie das geht :D


    Mit Freundlichen Grüßen
    Dragonfly


    /Beispiel editiert

    Einmal editiert, zuletzt von Dragonfly ()

  • du machst z.B. eine extra Variabe die du immer mit hoch zählst und vergleicht die von der mysql mit dieser variable


    //edit
    obwohl, das würde nicht gehen wenn du größere Lücken hast.. sry.. Denkfehler :D


    //edit2
    ich merke grad das ich dich glaube ich nicht richtig verstanden habe,
    du willst gucken ob z.B. in der ID 2 etwas steht oder nicht? oder wie meinst du das genau.. mach mal ein beispiel

    mfg
    Ali ;)

  • Mach das mal so
    stock FreeFrakCheck()
    {
    new query[128];
    for(new i;i<MAX_FRACTION_CARS;i++)
    {
    format(query,128,"SELECT * FROM `frakcars` WHERE `id`='%i' LIMIT 1;",i);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())continue;//falls eintrag gefunden überspringt er es
    return i;//gibt den wert wieder der frei ist
    }
    return -1;//wenn nix gefunden wird gibt er -1 wieder
    }
    Bedenke die Abfrage
    new id = FreeFrakCheck();
    if(id == -1)return error kein slot frei
    code hier

    All in all it's just another brick in the wall



  • Also ihre aufgelistteten Funktionen Funktionieren in der Neuen MYSql Version nicht mehr .


    Beispiel ist so
    1
    2
    3
    5
    6
    8
    9


  • Wieso machst du dir das so umständlich und sendest jedesmal erneut ein query damit misshandelst du deine mysql verbindung.


    zum Thema Plugin von BlueG & Maddinat0r/Pain123


    mysql_tquery(con_handler,"SELECT `id` FROM `frakcars`;","@GetFreeSlot","");



    forward @GetFreeSlot();
    @GetFreeSlot() {
    new rows[2]
    cache_get_data(rows[0],rows[1]);
    for(new i; i != rows[0]; ++i)if(cache_get_row_int(i,0) != i){
    weiter code ...
    }
    }

  • Ich möchte das die Funktion die Zahl die als erstes frei ist returnt wird.


    dann musst du dir eine extra variabel deklarieren und das ganze cachen um später auf den cache nochmal zurückzugeifen


    Beispiel:

    new Cache:fGetFreeSlot;
    #define UPDATE_CACHE() mysql_tquery(con_handler,"SELECT `id` FROM `frakcars`;","@SetCache","")


    forward @SetCache();
    @SetCache() {
    cache_delete(fGetFreeSlot);
    fGetFreeSlot = cache_save();
    return 1;
    }


    stock GetFreeSlot() {
    cache_set_active(fGetFreeSlot);
    new rows[2]
    cache_get_data(rows[0],rows[1]);
    for(new i; i != rows[0]; ++i)if(cache_get_row_int(i,0) != i)return i;
    return -1;
    }