[MySQL] Auslesen von mehreren sachen

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
  • Guten Tag Breadfish,


    Ich versuche mich gerade ein wenig an MySQL und möchte nun Fraktionsautos in einer Datenbank abspeichern was ich auch schon hinbekommen habe.
    Nun ist jedoch meine frage, wie ich diese beim Starten des Servers am einfachsten auslese...


    Ich habe es immomend so:
    stock LoadFrakCars()
    {
    if(CheckMySQL() == 1) //Checkt die Verbindung zur Datenbank
    {
    print(" ");
    print("Lade Fraktionsvehicle...");
    new query2[128];
    format(query2, sizeof(query2), "SELECT * FROM `frakcars`");
    mysql_query(query2);
    mysql_store_result();
    new anzahl = mysql_num_rows();
    for(new idx = 1; idx < anzahl+1; idx++)
    {
    new data[128], string[128],query[128];
    format(query, sizeof(query), "SELECT * FROM `frakcars` WHERE `ID` = '%d'",idx);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_field("Fraktion",data);
    new vBesitzer = strval(data);
    mysql_fetch_field("Model",data);
    new vModel = strval(data);
    mysql_fetch_field("PosX",data);
    new Float:posX = floatstr(data);
    mysql_fetch_field("PosY",data);
    new Float:posY = floatstr(data);
    mysql_fetch_field("PosZ",data);
    new Float:posZ = floatstr(data);
    mysql_fetch_field("PosR",data);
    new Float:posR = floatstr(data);
    mysql_fetch_field("Color1",data);
    new vcolor1 = strval(data);
    mysql_fetch_field("Color2",data);
    new vcolor2 = strval(data);
    mysql_fetch_field("Locked",data);
    new vLocked = strval(data);
    if(vModel != 0)
    {
    new Vehicle, Schild[20];
    if(FrakVehicle[Vehicle][FFraktion] == 1) { Schild = "SA-PD"; }
    SetVehicleNumberPlate(Vehicle, Schild);
    Vehicle = CreateVehicle(vModel,posX,posY,posZ,posR,vcolor1,vcolor2,-1);
    FrakVehicle[Vehicle][FFraktion] = vBesitzer;
    FrakVehicle[Vehicle][FModel] = vModel;
    FrakVehicle[Vehicle][FPosX] = posX;
    FrakVehicle[Vehicle][FPosY] = posY;
    FrakVehicle[Vehicle][FPosZ] = posZ;
    FrakVehicle[Vehicle][FPosR] = posR;
    FrakVehicle[Vehicle][FColor1] = vcolor1;
    FrakVehicle[Vehicle][FColor2] = vcolor2;
    FrakVehicle[Vehicle][FLocked] = vLocked;
    ChangeVehicleColor(Vehicle, vcolor1, vcolor2);
    format(string, sizeof(string), "[FRAKCAR] Fahrzeug: %d | Model: %d | Fraktion: %d", idx,vModel,vBesitzer);
    printf(string);
    }
    }
    mysql_free_result();
    }
    return 1;
    }


    So dies ist aber nach meiner meinung nach total umständlich und der meinung es gibt einfachere wege, jedoch finde ich diese nicht :wacko:
    Deshalb wollte ich hier mal fragen wie ihr das machen würdet :)


    Achja und das Problem an dieser Varriante ist z.B. wenn ich 3 Fraktionsautos habe und dann das Fraktionsauto was in der datenbank die id 2 hat lösche, bricht er dort die schleife ab und der server "Crasht" :whistling:




    Mit freundlichen Grüßen,
    Zunno

  • Hm okay, ich werde es mal versuche, jedoch weiß ich gerade nicht wie ich das genau machen soll ^^


    Ich hab es nun so:
    stock LoadFrakCars()
    {
    if(CheckMySQL() == 1)
    {
    print(" ");
    print("Lade Fraktionsvehicle...");
    new query2[128], str[512];
    format(query2, sizeof(query2), "SELECT * FROM `frakcars`");
    mysql_query(query2);
    mysql_store_result();
    while(mysql_fetch_row(str))
    {
    sscanf(str, "e<p<|>{i}s[16]s[24]s[130]iiifff>",FrakVehicle[playerid]); //Hier wieß ich nicht genau weiter, bei Playerid muss eig die CarID stehen^^ (Enum noch nicht angepasst)
    }
    mysql_free_result();
    new Vehicle, Schild[20];
    if(FrakVehicle[Vehicle][FFraktion] == 1) { Schild = "SA-PD"; }
    SetVehicleNumberPlate(Vehicle, Schild);
    Vehicle = CreateVehicle(vModel,posX,posY,posZ,posR,vcolor1,vcolor2,-1);
    FrakVehicle[Vehicle][FFraktion] = vBesitzer;
    FrakVehicle[Vehicle][FModel] = vModel;
    FrakVehicle[Vehicle][FPosX] = posX;
    FrakVehicle[Vehicle][FPosY] = posY;
    FrakVehicle[Vehicle][FPosZ] = posZ;
    FrakVehicle[Vehicle][FPosR] = posR;
    FrakVehicle[Vehicle][FColor1] = vcolor1;
    FrakVehicle[Vehicle][FColor2] = vcolor2;
    FrakVehicle[Vehicle][FLocked] = vLocked;
    ChangeVehicleColor(Vehicle, vcolor1, vcolor2);
    format(string, sizeof(string), "[FRAKCAR] Fahrzeug: %d | Model: %d | Fraktion: %d", idx,vModel,vBesitzer);
    printf(string);
    }
    return 1;
    }


    Ja ich weiß da erlich gesagt gerade nicht weiter, ich weiß auch gerade nicht ob die enum Namen genau so heißen müssen wie die Spalten in der MySQL Datenbank ^^


    Wäre schön wenn du mir vieleicht ne kleine Hilfestellung geben würdest :)



    Mit freundlichen Grüßen,
    Zunno