Daten aus MySQL abfragen und in Array 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
  • Hallo,
    ich würde einmal gerne wissen, wie man Daten aus einer Tabelle der MySQL-DB zieht(das weiß ich!) und wie man diese anschließend in einem Array speichert, sodass ich immer darauf zugreifen kann. Derzeit check ich z.B. das ganze so ab:

    stock IsPlayerInPetrolStation(playerid) {
    new sql[256];
    format(sql, sizeof(sql), "SELECT * FROM samp_petrolstations WHERE active = 1");
    mysql_query(sql);
    mysql_store_result();
    if(mysql_num_rows() > 0) {
    new line[750];
    new Tempdata[2];
    while(mysql_fetch_row(line)) {
    new Float:minX, Float:minY, Float:maxX, Float:maxY;
    sscanf(line, "p|ddffff",Tempdata[0], Tempdata[1], minX, maxX, minY, maxY);
    new Float:pX, Float:pY, Float:pZ;
    GetPlayerPos(playerid,pX,pY,pZ);
    if(IsPlayerInArea(playerid, minX, minY, maxX, maxY)) {
    mysql_free_result();
    return 1;
    }
    else {
    mysql_free_result();
    return 0;
    }
    }
    }
    return 0;
    }

    Nun würde ich aber gern, dass genau diese Daten in einem Array abgespeichert werden. Das ganze soll dann beim Gamemode-Init passieren. Das ist alles an sich kein Problem für mich nur bei der Array-Speicherung hapert es ein wenig. Wenn ich das nämlich so abfrage wird das zur reinsten Tortur für den Server.
    Vielen Dank schonmal und soweit noch einen schönen Abend.


    Mfg

  • Wie sieht denn die tabelle samp_petrolstations aus? Du kannst per sscanf (vorrausgesetzt du benutzt das plugin) die zeile direkt in ein array speichern, dafür musst du aber wissen wie die tabelle aussieht also was für spalten da sind.

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

  • Als erstes ein Enum erstellen:
    enum PetrolData
    {
    psActive,
    Float:psMinX,
    Float:psMinY,
    Float:psMaxX,
    Float:psMaxY,
    }
    new PetrolInfo[20][PetrolData];//Die 20 auf die Anzahl an Stationen ändern.
    Dann unter OnGameModeInit die Tankstellen laden und darin speichern.
    mysql_query("SELECT * FROM samp_petrolstations");
    mysql_store_result();
    if(mysql_num_rows() > 0)
    {
    new line[750], i=0;
    while(mysql_fetch_row(line))
    {
    sscanf(line,"e<p<|>{i}iffff>", PetrolInfo[i]);
    i++;
    }
    return 0;
    }
    Und die IsPlayerInPetrolStation funktion:
    stock IsPlayerInPetrolStation(playerid)
    {
    new Float:pX, Float:pY, Float:pZ;
    GetPlayerPos(playerid,pX,pY,pZ);
    for(new i=0; i<sizeof(PetrolInfo); i++)
    {
    if(IsPlayerInArea(playerid, PetrolInfo[i][psMinX], PetrolInfo[i][psMinY], PetrolInfo[i][psMaxX], PetrolInfo[i][psMaxY])) return 1;
    }
    return 0;
    }


    Vorraussetzung dafür ist aber, das du minY,minX,maxX und maxY in der Datenbank als Float wert speicherst, und nicht wie du als string(carchar).

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