[Mysql] Hilfe bei /vinfo

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 Brotfische,


    Ich möchte mit dem Befehl "/vinfo" bestimmte Daten aus der Datenbank auslesen. Undzwar wenn man z.B eintippt /vinfo 531 soll dann soll dem Spieler eine Nachricht angezeigt werden, Wem das Fahrzeug gehört und wer der letzte Fahrer dieses Fahrzeugs war.


    Nun ich steh ich auf dem Schlauch... ich weiß nicht wie das machen soll :)
    Ich hoffe ihr könnt mir helfen.


    Jetzt noch meine Datenbanken:


    Datenbank "Cars":



    Fotolink: http://www.bilder-upload.eu/sh…ile=cfae21-1433102432.png


    Struktur:



    Fotolink: http://www.bilder-upload.eu/sh…ile=2801cc-1433102541.png


    Datenbank "User":



    Fotolink: http://www.bilder-upload.eu/sh…ile=c2b185-1433102605.png



    Struktur:



    Fotolink: http://www.bilder-upload.eu/sh…ile=b1f1ba-1433102657.png


    SpielerCarsLaden: (vllt. hilft das ja)


    public OnPlayerCarsLoad(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id=getFreeCarID();
    cInfo[id][model]=cache_get_field_content_int(i,"model",dbhandle);
    cInfo[id][besitzer]=cache_get_field_content_int(i,"besitzer",dbhandle);
    cInfo[id][c_x]=cache_get_field_content_float(i,"x",dbhandle);
    cInfo[id][c_y]=cache_get_field_content_float(i,"y",dbhandle);
    cInfo[id][c_z]=cache_get_field_content_float(i,"z",dbhandle);
    cInfo[id][c_r]=cache_get_field_content_float(i,"r",dbhandle);
    cInfo[id][db_id]=cache_get_field_content_int(i,"id",dbhandle);
    cInfo[id][id_x]=CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],cInfo[id][Car_Color1],cInfo[id][Car_Color2],-1);
    }
    return 1;
    }
    getFreeCarID()
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]==0)return i;
    }
    return 0;
    }


    Es wäre echt super wenn ihr mir helfen könntet :)


    MfG German_ScripterHD


    Mit freundlichen Grüßen
    German_ScripterHD

    Einmal editiert, zuletzt von German_ScripterHD ()

  • ocmd:vinfo(playerid, params[])
    {
    if(!params[0]) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /vinfo [id]");
    new id = strval(params);
    if(id < 1 || id >= MAX_VEHICLES) return SendClientMessage(playerid, 0xFF0000FF, "Error: Ungültige ID.");
    new query[256];
    format(query, sizeof(query), "SELECT User.username FROM User INNER JOIN Cars ON (User.id=Cars.besitzer AND Cars.id='%d');", id);
    mysql_tquery(dbhandle, query, "OnCmd_vinfo", "d", playerid);
    return 1;
    }


    forward OnCmd_vinfo(playerid);
    public OnCmd_vinfo(playerid)
    {
    if(!cache_get_row_count(dbhandle)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Dieses Fahrzeug existiert nicht.");
    new string[145], owner[MAX_PLAYER_NAME];
    cache_get_row(0, 0, owner);
    format(string, sizeof(string), "Das Fahrzeug gehört: %s", owner);
    return SendClientMessage(playerid, 0xFFFFFFFF, string);
    }


    Ich hoffe, das MySQL Plugin kommt mit dem Query klar.
    Falls du eine Erklärung zum INNER JOIN brauchst: http://www.w3schools.com/sql/sql_join_inner.asp


    Den letzten Fahrer konnte ich dir nicht machen, da ich die Spalte nicht kenne, die hast du noch nicht. Es würde aber in etwa dann so aussehen, je nach Benennung:

    Spoiler anzeigen
    ocmd:vinfo(playerid, params[])
    {
    if(!params[0]) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /vinfo [id]");
    new id = strval(params);
    if(id < 1 || id >= MAX_VEHICLES) return SendClientMessage(playerid, 0xFF0000FF, "Error: Ungültige ID.");
    new query[256];
    format(query, sizeof(query), "SELECT User.username FROM User INNER JOIN Cars ON (User.id=Cars.besitzer AND Cars.id='%d');", id);
    mysql_tquery(dbhandle, query, "OnCmd_vinfo", "dd", playerid, 1);
    return 1;
    }

    Spoiler anzeigen
    forward OnCmd_vinfo(playerid, step);
    public OnCmd_vinfo(playerid, step)
    {
    static owner[MAX_PLAYER_NAME];
    if(step == 1)
    {
    if(!cache_get_row_count(dbhandle)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Dieses Fahrzeug existiert nicht.");
    cache_get_row(0, 0, owner);
    new query[256];
    format(query, sizeof(query), "SELECT User.username FROM User INNER JOIN Cars ON (User.id=Cars.letzterFahrer AND Cars.id='%d');", id);
    mysql_tquery(dbhandle, query, "OnCmd_vinfo", "dd", playerid, 2);
    return 1;
    }
    new string[145];
    if(!cache_get_row_count(dbhandle)) format(string, sizeof(string), "Das Fahrzeug gehört: %s (zuletzt von niemandem gefahren)", owner);
    else
    {
    new driver[MAX_PLAYER_NAME];
    cache_get_row(0, 0, driver);
    format(string, sizeof(string), "Das Fahrzeug gehört: %s (zuletzt von %s gefahren)", owner, driver);
    }
    return SendClientMessage(playerid, 0xFFFFFFFF, string);
    }


    Teste aber zuerst den ersten Code.