3.2k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von Experte (1.1k Punkte)
Hallo
Ich fass mich kurz:
Kann man als Zellentyp auch ein Arrays angeben, z.B. sowas wie VARCHAR[] oder INT[]?
Wenn nein, was kann man sonst tun, um sowas ähnliches zu erreichen?
Danke schon jetzt,
MfG
TByte

8 Antworten

0 Punkte
Beantwortet von deluxestyle Mitglied (901 Punkte)
was willst den damit erreichen?
0 Punkte
Beantwortet von Experte (1.1k Punkte)
Hallo
Dass ein Spieler mehre Planet IDs hat und ich nicht alles in einzelne Spalten machen muss ;-)
MfG
TByte
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Für sowas verwendet man in Datenbanken normalerweise 1:n Relationen, d.h. eine untergeordnete Tabelle welche die User-ID und die Planeten-ID enthält, also etwas in der Form

CREATE TABLE besitzt_planet (
user_id INT UNSIGNED NOT NULL,
planet_id INT UNSIGNED NOT NULL,
PRIMARY KEY (user_id,planet_id)
);
0 Punkte
Beantwortet von Experte (1.1k Punkte)
Hallo
bis jetzt sahs ähnlich aus:
CREATE TABLE spiler (sid INT PRIMARY KEY, planetid1 INT, planetid2 INT, planetid3 INT...)

Das wollt ich verkürzen
Kann man 2 PRIMARY KEYS machen?

MfG
TByte
0 Punkte
Beantwortet von Experte (1.1k Punkte)
Achja: erstmal danke für die AWs
0 Punkte
Beantwortet von Experte (3.2k Punkte)
hey, wie werden arrays in anderen programmiersprachen gemacht?
mit zeigern!

lege eine tabelle mit den inhalten an, wo dann jedes element des "arrays" einzeln reinkommt, mit id des nächsten und vorherigen,
lege eine 2. tabelle an, wo jeweils die id des ersten eintrags drin ist.
das nennt sich dann doppelt verkettete liste, und ist jedenfalls arrayähnlich.
der vorteil ist, dass du auch überall zwischendrin was reintun kannst, leider musst du dich durch die einzelnen einträge durchsteppen, was bei vielen einträgen recht aufwändig ist.
alternativ kannst du auch eine tabelle mit folgenden spalten machen:
id, arrayname/nummer, position im array, inhalt (vom gewünschten typ)

und das dann mit "SELECT inhalt FROM arraytable WHERE arraynummer='1' ORDER BY posinarray"
abfragen, dann erhälst du alle einträge, die dann schön innem array gespeichert sind.

"echte" arrays wird man kaum hinbekommen, das mysql eine datenbank ist, und man arrays normalerweise als speicherblock betrachtet, der dann über einen adresszeiger angesprochen wird.

Ele
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Wenn du die IDs nicht weiter verknüpfen willst, sondern einfach nur die Werte speichern, kannst du für das Array auch ein TEXT- oder VARCHAR-Feld anlegen und dein PHP-Array beim Speichern mittels serialize() in einen String umwandeln bzw. beim Auslesen die Zeichenkette aus dem Feld mittels unserialize() wieder in ein Array umwandeln.

Du kannst auch mehrere numerische IDs einfach durch Komma getrennt in ein Textfeld schreiben, hier kannst du zumindest mit der MySQL-Funktion FIND_IN_SET() feststellen, ob ein bestimmter Wert in der Liste erhalten ist.

Wenn jeder Planet immer nur genau einem User zugeordnet ist, kannst du auch den umgekehrten Weg gehen und beim Planeten-Datensatz ein Feld "userid" anlegen, also
CREATE TABLE planet (id INT UNSIGNED NOT NULL PRIMARY KEY, besitzer INT UNSIGNED NULL, .....


Die von mir zuerst vorgeschlagene Zwischentabelle ist eigentlich nur nötig, wenn zwischen Planeten und Usern eine n:m-Beziehung vorliegt, also ein Planet mehreren Usern gehören kann und ein User mehrere Planeten besitzen kann.
0 Punkte
Beantwortet von Experte (1.1k Punkte)
Hallo
Wenn jeder Planet immer nur genau einem User zugeordnet ist, kannst du auch den umgekehrten Weg gehen und beim Planeten-Datensatz ein Feld "userid" anlegen, also

ich glaub das werd ich machen, vieln vielen Dank!
MfG
TByte
...