phpbar.de logo

Mailinglisten-Archive

[php] key und arrays

[php] key und arrays

Manuel Hossfeld lists_(at)_hossfeld.de
Tue, 1 Jun 1999 18:58:37 +0200 (MEST)


Hallo Anne,

> kann ich in einem Datenbankfeld (mysql), das als key in einer Tabelle
> auf einen primary key einer anderen Tabelle verweist mehrere variablen
> (Indexnummern) speichern und in Form eines arrays verarbeiten bzw.
> abfragen???
> 
> hm, ich hoffe das ist deutlich genug oder auch verstaendlich gefragt :-)

Ich habe es zugegebenermassen zweimal lesen müssen - aber das will nix
heissen... ;-)
Wenn ich Dich richtig verstanden habe, willst Du also bereits auf
Datenbankebene ein SELECT auf Deine Adressen-Tabelle Dir bereits alle
IDs (=Keys) der damit verknüpften Tabelle sozusagen "auf dem Tablett"
zur Verarbeitung in einem Array liefert, damit Du diese "verbundenen"
Datensätze widerum SELECTen / weiterverarbeiten kannst...
Kurze Antwort: Das geht nicht. (Zumindest nicht so)
Grund: Wie Du vielleicht schonmal gehört/gelesen hast, speichert eine
relationale Datenbank die Daten von Feldern einer Tabelle als sog.
"skalare Werte" ab. D.h.: Ein Wert in einem Feld ist halt auch einfach
EIN Wert - ganz gleich ob da nun ein, zwei, oder hundert IDs drin
stehen. (D.h. für die Datenbank macht es erstmal keinen Unterschied ob
da "4711" oder "4711 1234 5678" drin steht). So weit, so gut. (Sorry
falls ich damit etwas erklärt haben sollte was Dir eh schon klar war.)

Folgende Möglichkeiten hast Du:
1.)
Wenn Du die Elemente in Deinen "Mehrfachfelder" immer konsequent mit ein
und demselben "Trenner" (z.B. Komma oder Space) getrennt hast, kannst
Du die mit PHP natürlich wieder aufsplitten. Z.B. mit "explode" ("split"
ginge auch):

$Mein_Array = explode(" ", $Feld_Aus_DB);

Damit hättest Du dann Dein Array (falls die IDs mit Blanks voneinander
getrennt sind). Falls Dir das bereits weiterhilft, brauchst Du jetzt
eigentlich nicht mehr weiterlesen... ;-)

2.)
Du nimmst eine andere Datenbank als MySQL, die sowas bereits kann. Das
müsste dann eine objektorientiere oder eine objektrelationale sein. (
Die erlauben Dir die Definition bzw. Verwendung von neuen Datentypen,
die auch "nicht-skalare Werte" verarbeiten können. Mit z.B. Oracle8 oder
auch Postgres müsste es gehen. Das ist jetzt allerdings etwas
spekuliert - ich hab´s selbst noch nicht probiert.

3.)
Was Du allerdings vermutlich machen willst/solltest, ist eine sog.
"n:m"-Relation (in der Datenbank). (Sprich: Eine oder mehrere Deiner
Adressen kann mit einer oder mehrerer WasAuchImmerInDerAnderenTabelleIst
verknüpft sein. Denn so ist es letztendlich doch - oder hab ich das
falsch verstanden?)
Dazu brauchst Du dann eine zusätzliche "Hilfstabelle", über die diese
Relation hergestellt wird. In Deinem Fall würde diese Hilfstabelle
etwa so aussehen (ich gehe jetzt ab hier mal davon aus daß die Tabelle
die bid als Key hat "irgendwas" heisst):

CREATE TABLE adr_irgendwas (
fid int ...,
bid int ...
...
);

Das allein nutzt ohne den richtigen Select noch nix. Also:
SELECT * from Adressen, irgendwas, adr_irgendwas WHERE Adressen.fid =
adr_irgendwas.fid and adr_irgendwas.bid = irgendwas.bid;

Das Selected Dir dann die sämtliche Felder aus der Adressentabelle und
die dazugehörigen "mehrfach-verknüpften" Felder aus der
"irgendwas"-Tabelle (und das ganz ohne Array...).

Das ganze war jetzt gleichermaßen aus dem Kopf und aus dem stegreif
(Stegreif?), also nicht wundern wenn mir vielleicht irgend ein kleiner
Feler unterlaufen ist. ;-)

So, jetzt habe ich Dich womöglich vollends verwirrt und/oder völlig an
Deinem Anliegen "vorbeierklärt". Vielleicht hilft´s aber auch ein
bisschen...

CU,
Manuel


-- 
Quote of the month:
"When I went outside, it was raining. But Microsoft told me it wasn´t
raining, so I didn´t get wet."
	(Ann-Marie Squeo, Reporter)






php::bar PHP Wiki   -   Listenarchive