• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

tabellen verknüpfen [JOIN] -> fremdschlüssel?

Status
Für weitere Antworten geschlossen.

cOenesthesia

Neues Mitglied
tabellen verknüpfen [JOIN] -> fremdschlüssel?

hallo zusammen.

ich muss mich zwangsweise für mein aktuelles projekt mit mysql auseinander setzen und damit wär ich dann auch schon bei meinem ersten problem *g
verbinden, auslesen, reinschreiben, updaten, löschen etc. klappte alles wunderbar solange sich meine daten in nur einer tabelle befinden.

jetzt ist es nur so, dass ich zwei tabellen brauche, die miteinander zu verknüpfen sind.
da es aber in mysql keine 'fremdschlüssel' gibt sind die tabellen bei der abfrage mit nem JOIN zu verknüpfen.
ich hoff' das ist so korrekt?! - so viel hab ich zumindest gelesen...


wenn ich jetzt also 2 tabellen hab...

Code:
+-------------+		+-------------+
|     mab     |		|transponder  |
+-------------+	  1+-------------+
|id_m[primary]|   /--|id_r[primary]|
|id_r         |--/   |berechtigung |
|name         |1	  |raum         |
|vorname      |		+-------------+
|etc          |	
+-------------+

wie bekomme ich überhaupt den inhalt der tranponder.id_r [primary key] nach mab.id_r,
um das später in nem JOIN überhaupt vergleichen zu können?! :?

geht das überhaupt? oder wie sollte ich das sonst machen?
:|
 
du möchtest die daten beider tabellen in einer einzigen tabelle anzeigen, ist das korrekt?

das würde dann so gehen:

select * from mab a, transponder b where a.id_r=b.id_r
 
mhm,
erstmal würde ich gern der mab.id_r den selben inhalt wie der transponder.id_r irgendwie 'zuweisen', wenn das irgendwie geht.
weil momentan ist's ja so, dass eben:
mab.id_r!=transponder.id_r :?

in der mab tabelle ist id_r ja die ganze zeit nun einfach nur leer. :|

als auto_increment kann ich mab.id_r nich definiern, weil der primary key in mab ja schon ein anderer ist.

aber wenn ich das jetzt so überlege...
dann sind mab.id_m und transponder.id_r ja immer gleich, weil ich für jeden datensatz immer in beiden tabellen was eintragen lasse, oder? :?

also könnte ich ja dann mit select * from mab a, transponder b where a.id_m=b.id_r
das ganze abfragen, wenn ich das richtig verstanden hab..
dann bräuchte ich auch das id_r in der mab tabelle nich, oder?
 
an sich scheint das zu 'funzen' ;D

jetzt hab ich nur'n problem wenn ich versuche die abfrage mit AND zu erweitern. irgendwie mag er das nich sonderlich ^^

egal. des werd ich schon hinkriegen.
merci beaucoup (:
 
wenn das mab.id_r leer ist dann ist das schlecht....
du solltest bei jedem datensatz den du in die mab tabelle einträgst, den dementsprechenden schlüssel (transponder.id_r) aus der transponder tabelle in die mab tabelle eintragen.(in mab.id_r).

Nur so kannst du dann die join operation durchführen...

wenn du jetzt:
select * from mab a, transponder b where a.id_m=b.id_r

machst, dann kommt zwar ne tabelle raus, aber meiner meinug nach stimmen dann die daten nicht mehr, da ja mab.id_m mit transponder.id_r nichts zu tun hat...

es könnte doch sein, dass du für zwei verschiedene personen del gleichen raum eingeben möchtest.
Und in dem fall ist dann mab.id_m != transponder.id_r
Genau desshalb hast du ja warscheinlich die mab.id_r eingeführt. Du musst die mab tabelle mit den dementsprechenden id_r einträgen ergänzen und dann sollte es mit der join operation passen.
 
cisi schrieb:
du solltest bei jedem datensatz den du in die mab tabelle einträgst, den dementsprechenden schlüssel (transponder.id_r) aus der transponder tabelle in die mab tabelle eintragen.(in mab.id_r).

genau das war mein problem. mir war und ähm ist eben nicht klar wie ich das hätte machen sollen.
also war's schon richtig verstanden von dir *g
aber es geht ja nun auch so. denk ich, hoff ich ;D

es wird nie der fall sein, dass bei mehreren mitarbeitern alle daten aus transponder gleich sind. deswegen sind mab.id und transponder.id für jeden mitarbeiter einmalig, daher ja auch primärschlüssel.
und da ich ja die daten für mab und transponder gleichzeitig erfasse und beide id's auto_increment sind, sollten diese doch immer gleich sein...


ist das alles verwirrend :?
 
es wird nie der fall sein, dass bei mehreren mitarbeitern alle daten aus transponder gleich sind. deswegen sind mab.id und transponder.id für jeden mitarbeiter einmalig, daher ja auch primärschlüssel.
und da ich ja die daten für mab und transponder gleichzeitig erfasse und beide id's auto_increment sind, sollten diese doch immer gleich sein...

warum dann überhaupt 2 getrennte tabellen? und nicht alle daten in eine einzige tabelle, ist das irgendwie vorgegeben gewesen:

Code:
-------------+      
|     mab     |     
+-------------+     
|id_m[primary]|   
|id_r         |
|name         |
|vorname      |
|etc          |   
|berechtigung |
|raum         |
+-------------+
 
ich hatte ja auch zu anfang alles in einer tabelle. :?

nur beinhaltet transponder unter anderem noch 12 einzelne felder,
jeweils für flügel|stockwerk, dann noch zusätzliche räume [4stk]
und ich wollte die daten eigentlich nur trennen, wegen der 'übersichtlichkeit',
wenn man das so nennen kann.
und mab hat auch noch weitere felder...

war da nich irgendwas mit normalformen und irgendwelchen abhängigkeiten der eigenschaften vom primärschlüssel? *g
 
oh das wusste ich noch nicht... man kann alos während einer mysql anweisunf sozusagen variabelen initialisieren? und über diese mit der anweißung daten aus verschidenen tabellen holen?

wie heißen diese dann nach einem mysql_fetch_array?
 
wo das mit dem variabeln initialisiern steht, seh ich nun nich (;

du kannst tabellen nur in der abfrage miteinander verknüpfen.
allerdings auch nur dann, wenn du 'vergleichbare' felder in den jeweiligen tabellen hast. sonst geht das wohl schlecht.
was im endeffekt ja dann deinen 'fremdschlüssel' darstellt.

im grunde machst du mit der abfrage eine große tabelle, die alle spalten der beiden tabellen beinhaltet.

ich hoff das war nun so richtig Óò
 
aber was ist wenn spalten doppelt vorkommen? warum sollten die typen vergleichbar sein? wie meinst du das mit fremdschlüssel?
 
fremdschlüssel gibt es ja im grunde, um die rendundanz zu verringern.
wenn du alle felder die du brauchst in der jeweiligen tabelle hast, wär ne verknüpfung ja gar nich nötig, oder?

der fremdschlüssel is in einer tabelle primärschlüssel und somit eindeutig. in der anderen tabelle,
muss er ebenso eindeutig sein [ein datensatz hat also in beiden tabellen für diese spalte den selben wert].
er verweist ja im grunde nur auf seine tabelle, wo er primärschlüssel ist, und auf die datensätze darin.
anhand der eindeutigkeit können die datensätze dann miteinander 'verknüpft' werden.

ich hoff man versteht das. ansonsten vielleicht einfach mal nachlesen ^^
-> wikipedia hilft
[hab meinen schulkram nun auch leider net da zum abschreiben *g]
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben