Mehere Datensätze in einem Feld

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
  • Nabend Community,

    ich wollte mal fragen ob es möglich ist mehrere Namen in einem Feld in einer MySQL Datenbank speichern und auslesen zu lassen.


    Beispiel:



    id ->1
    Besitzer -> Tom;Günther;Peter;Marcel;Thomas;



    Hoffe ihr versteht was ich meine.




    Mit freundlichem Gruß



    Boomray

  • Klar ist das möglich.
    Du fragst den Datensatz ab und splittest die Werte, entweder manuell (MYSQL Lädt falsche werte) oder du nutzt sscanf und splittest es eben an jedem Semikolon.


    Falls du eine genauere Erklärung brauchst, oder am Code hängst, sag Bescheid.



    EDIT: Das was LeijaT unten schreibt stimmt natürlich. Also diese Variante solltest du wirklich nur benutzen, wenn du weißt was du machst. Ansonsten mache es mit zwei Tabellen.

    3HZXdYd.png

    2 Mal editiert, zuletzt von Jeffry ()

  • Der Richtigkeit halber sollte hier vielleicht noch direkt klargestellt werden, dass SQL so nicht genutzt wird bzw werden sollte. Der "korrektere" Aufbau einer Datenbankstruktur wäre in deinem Fall 2 Tabellen.


    Tabelle 1 - besitztümer: id (auto_increment), bezeichnung, sonstige_felder
    Tabelle 2 - besitzer: id (auto_increment), besitzername, besitztums_id, sonstige_felder


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Okey danke euch,


    abfragen kann ich das doch dann so oder:


    besitztumInfo[besitzer[playerid][besitzer]][Bezeichung]


    oder wie mach ich es richtig??


    Und wie lasse ich z.B untereinander alle Auslesen die besitztum "1" haben ?

  • Also das was du da vor hast ergibt irgendwie keinen Sinn.
    Zudem ist die Syntax falsch, da die Variable gleich heißt wie der Wert aus dem Enum ("besitzer").


    Was genau willst du denn da machen? Hast du vielleicht noch etwas mehr Code als nur diesen, damit wir das nachvollziehen können, was du machen willst?

  • Code habe ich gar keinen da ich am überlegen bin wie ich das genau umsetze..
    Ich möchte z.B ein Auto haben was dem Spieler "Lukas" gehört und er soll an andere Spieler so gesehen "Schlüssel" verteilen sodass diese auch mit dem Auto fahren können, es abschließen können und so.
    Und dazu soll der Besitzer "Lukas" jedem Spieler der einen Schlüssel hat diesen wieder abnehmen können.



    LG

  • Dazu würde ich dir dann zwei Tabellen raten, das ist wesentlich einfacher aufzubauen und zu verwalten, als es in eine Spalte zu schreiben.


    Tabelle 1:
    Die Daten des Autos mitsamt der Datenbank ID des Spielers dem das Auto gehört (sagen wir Lukas hat die ID 1).


    Tabelle 2:
    ID (Auto Increment) | Fahrzeug_ID | Nutzer_ID


    ID: Einfach der Unique Key, damit es keine doppelten Zeilen gibt.
    Fahrzeug_ID: Die ID des Fahrzeugs, damit du es finden kannst
    Nutzer_ID: Die ID des Spielers der einen Schlüssel hat.



    Beispiel:
    Lukas (ID 1) gibt für seinen Cheetah (ID 54) einen Sclüssel an Tom (ID 5) und einen an Jerry (ID 125).


    Tabelle 1 sieht dann für den Cheetah so aus:
    54 | 415 | posX | posY | posZ | ... | 1 <= diese 1 ist der Besitzer


    Tabelle 2 (die ID ist egal, die wird einfach von der DB erstellt und ist für dich ohne Relevanz, wir nehmen einfach 24 und 25):
    24 | 54 | 5
    25 | 54 | 125


    => Somit hat auf Fahrzeug 54 Zugriff: Lukas (ID 1), da ihm das Fahrzeug gehört (steht so in Tabelle 1) und außerdem Tom (ID 5), da er in Zeile 24 in Tabelle 2 steht zur ID 54 und Jerry (ID 125), da er ebenfalls in Tabelle 2 zur ID 54 steht.



    Speichern kannst du es dann über eine Variable (sagen wir du hast maximal 5 Schlüssel):
    new Keys[MAX_FAHRZEUGE][5];
    Keys[54][0] = 1;
    Keys[54][1] = 5;
    Keys[54][2} = 128;



    Das ganze darf so natürlich nicht mit harten Zahlen im Code stehen, sondern muss dynamisch über die SQL-Abfrage geschehen.
    Dazu machst du dir am besten mal den Code mit den Abfragen, so weit wie du kommst.

  • Danke Jeffry schon mal,


    also müsste ich ein enum erstellen z.B so erstellen wa?


    enum carKeys{ id_x, fahrzeug_id, besitzer_id}
    new ckInfo[MAX_PLAYERS][carKeys];

    und wenn ich abfragen will ob der spieler ein schlüssel hat so ?




    for(new i=0; i<sizeof(cInfo); i++){
    if(cInfo[i][id] == ckInfo[playerid][fahrzeug_id])
    {


    }
    }




    Aber ich merke selbst schon das an meinem Code nicht alles oder kaum was stimmt :)


    Brauche nur noch einen "tritt" dann schaffe ich es hoffentlich selbst :)

  • enum vehEnum {
    id,
    besitzer,
    erlaubnis[10]
    };
    new Fahrzeuge[100][vehEnum];


    OnPlayerEnterVehicle:
    new allowed;
    for(new v=0; v<100; v++)
    {
    if(vehicleid == Fahrzeuge[v][id])
    {
    for(new i=0; i<10; i++)
    {
    if(Fahrzeuge[v][erlaubnis][i] == SpielerInfo[playerid][DB_ID])
    {
    //darf einsteigen.
    allowed = 1;
    }
    }
    }
    }
    if(!allowed)
    {
    //Spieler darf nicht einsteigen!!
    }