CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
25.02.2009, 12:37:14
|
Anfänger
|
|
Registriert seit: Feb 2009
Alter: 46
Beiträge: 12
|
|
koppelentität zwischen 2 tabellen
Hallo zusammen,
mich beschäftigt gerade ein kleines problem zu einem privatem projekt.
es geht um eine kleine filmdatenbank in der ich alle meine vhs/dvd´s katalogisieren will.
haupttabelle film
nebentabellen darsteller und regisseur
ich möchte später die möglichkeit haben, mir z.b. alle filme eines bestimmten regisseur anzeugen zu lassen.
soweit ich das verstanden habe, brauche ich dazu eine koppeltabelle zwischen film und regisseur bzw. für die darstellersuche zwischen film und darsteller.
diese koppeltabellen habe ich angelegt (film_hat_darsteller und film_hat_regisseur) und als indizes die primärschlüssel der jeweiligen beiden tabellen (darsteller - film / film - regisseur) angegeben.
nun habe ich die vermutung, das dies allein noch nicht reichen wird. brauchen die tabellen noch einen eigenen primärschlüssel?
wie kann ich nun eine verbindung zwischen bereits angelegten filmen und z.b. darstellern herstellen??
hoffe das liest sich einigermaßen verständlich, stehe nämlich aktuell ziemlich auf dem schlauch wie ich das realisieren kann.
grüsse
onomo
|
25.02.2009, 12:54:46
|
Junior Member
|
|
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
|
|
AW: koppelentität zwischen 2 tabellen
Ja, natürlich braucht die die Lookup Tabelle noch einen Primary Key, der dann gleichzeitig auch als Index dient. Du musst also nur die beiden angelegten Indexe löschen und stattdessen einen Primary Key über beide Spalten 'ziehen'.
Code:
ALTER deine_tabelle ADD PRIMARY KEY (film_hat_darsteller, film_hat_regisseur);
Zitat:
wie kann ich nun eine verbindung zwischen bereits angelegten filmen und z.b. darstellern herstellen??
|
Mit einem JOIN (wenn ich deine Frage richtig verstanden habe). z.B. so:
Code:
SELECT d.darsteller_name
FROM filme AS f
INNER
JOIN film_zu_darsteller AS fd
ON fd.film_id = f.film_id
INNER
JOIN darsteller AS d
ON d.darsteller_id = fd.darsteller_id
WHERE f.film_name = 'Gesuchter Film'
Diese Abfrage würde dann alle Schauspieler des gesuchten Films selektieren.
|
25.02.2009, 13:16:24
|
Anfänger
|
|
Registriert seit: Feb 2009
Alter: 46
Beiträge: 12
|
|
AW: koppelentität zwischen 2 tabellen
danke erstmal für die schnelle antwort
die verbindung zwischen schauspieler und film herstellen meinte ich eher so.
die tabelle darsteller hat z.b. 30 einträge. die tabelle film ebenfalls.
nun möchte ich die verbindung zwischen darstellern und filmen erstmal herstellen.
also z.b. das der darsteller moritz bleibtreu in den filmen lola rennt und das experiment mitgespielt hat.
|
25.02.2009, 14:07:36
|
Anfänger
|
|
Registriert seit: Feb 2009
Alter: 37
Beiträge: 6
|
|
AW: koppelentität zwischen 2 tabellen
Hi,
also wenn ich dich richtig verstehe, willst du in der Film Tabelle klar machen, das der Schauspieler in dem und dem Film mit gespielt halt.
Ich würde einfach in der Tabelle Filme noch eine Spalte hinzufügen mit zb dem Titel Schauspieler als INT. In die Felder trägst du dann zb immer die ID des Schauspielers ein wenn er in dem Film mit gespielt hat und am ende machst du wie Crisps gesagt hat einen JOIN auf die Tabelle Schauspieler.
|
25.02.2009, 14:19:11
|
Anfänger
|
|
Registriert seit: Feb 2009
Alter: 46
Beiträge: 12
|
|
AW: koppelentität zwischen 2 tabellen
Zitat:
Zitat von merowinger
Hi,
also wenn ich dich richtig verstehe, willst du in der Film Tabelle klar machen, das der Schauspieler in dem und dem Film mit gespielt halt.
Ich würde einfach in der Tabelle Filme noch eine Spalte hinzufügen mit zb dem Titel Schauspieler als INT. In die Felder trägst du dann zb immer die ID des Schauspielers ein wenn er in dem Film mit gespielt hat und am ende machst du wie Crisps gesagt hat einen JOIN auf die Tabelle Schauspieler.
|
Da ist doch aber das Problem, dass ich jeweils nur 1 Schauspieler pro Film eintragen kann oder irre ich mich da?
|
25.02.2009, 14:32:45
|
Anfänger
|
|
Registriert seit: Feb 2009
Alter: 37
Beiträge: 6
|
|
AW: koppelentität zwischen 2 tabellen
Laut Normalformen sollte man immer nur eine Information eintragen, da hast du recht. aber man kann es auch umgehen und hinterher glaub mit mein explode/implode arbeiten.
Aber wie gesagt, entspricht nicht gerade der Normalformen ;)
|
25.02.2009, 14:39:15
|
Junior Member
|
|
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
|
|
AW: koppelentität zwischen 2 tabellen
Du hast doch schon das Beispiel einer Lookup (Koppel) -tabelle genannt. Du hast also eine Tabelle für die Filme:
Code:
film_id | film_name
-------------------------
1 | Lola Rennt
2 | Das Experiment
Eine zweite für die Darsteller:
Code:
darsteller_id | darsteller_vorname | darsteller_nachname
--------------------------------------------------------
1 | Moritz | Bleibtreu
Und eine dritte um das ganze zu verkuppeln ;)
Code:
darsteller_id | film_id
------------------------
1 | 1
1 | 2
(Mit einem Primary Key über beide Spalten)
Eine Abfrage für...
Zitat:
also z.b. das der darsteller moritz bleibtreu in den filmen lola rennt und das experiment mitgespielt hat.
|
...würde dann so aussehen:
Code:
SELECT f.film_name
FROM darsteller AS d
INNER
JOIN die_lookup_tabelle AS df
ON df.darsteller_id = d.darsteller_id
INNER
JOIN filme AS f
ON f.film_id = df.film_id
WHERE d.darsteller_vorname = 'Moritz' AND d.darsteller_nachname = 'Bleibtreu';
Geändert von Crisps (25.02.2009 um 14:44:52 Uhr)
|
26.02.2009, 15:24:04
|
Anfänger
|
|
Registriert seit: Feb 2009
Alter: 46
Beiträge: 12
|
|
AW: koppelentität zwischen 2 tabellen
Zitat:
Zitat von Crisps
(Mit einem Primary Key über beide Spalten)
|
diese aussage treibt leider noch fragezeichen über meinen kopf :/
ich habe natürlich in den tabellen film und darsteller jeweils einen primary key, wie kann ich die aussage jetzt werten??
bin noch frisch im sql thema, also bitte entschuldigt wenn die frage zu naiv ist ;)
|
27.02.2009, 08:33:04
|
Junior Member
|
|
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
|
|
AW: koppelentität zwischen 2 tabellen
Zitat:
Zitat von onomo
bin noch frisch im sql thema, also bitte entschuldigt wenn die frage zu naiv ist ;)
|
Die Frage ist nicht naiv. Ich bin allerdings auch nicht der beste Erklärer, ich bastle lieber die Abfragen und Tabellen - mit dem erklären selbst hab ichs nicht.
Zitat:
Zitat von onomo
diese aussage treibt leider noch fragezeichen über meinen kopf :/
ich habe natürlich in den tabellen film und darsteller jeweils einen primary key, wie kann ich die aussage jetzt werten??
|
Hast Du mein Beispiel von weiter oben angeschaut und verstanden? :)
Es gibt also erst einmal zwei Tabellen: Filme und Darsteller. Um eine Relation zwischen diesen beiden Tabellen herzustellen braucht man noch eine dritte Lookup-Tabelle um eben diese relation herzustellen. Also z.B. so:
Code:
film_id | darsteller_id
------------------------
1 | 1
2 | 1
In dieser Tabelle speichern wir jede Film-ID und die dazugehörigen ID der jeweiligen Darsteller. Und für diese Tabelle legen wir jetzt den Primärschlüssel über die beiden Spalten (film_id, darsteller_id) - Da ja jeder Darsteller nur einmal in einem Film vorkommen kann.
Hast Du meine Erklärung verstanden?
Geändert von Crisps (27.02.2009 um 08:33:52 Uhr)
|
27.02.2009, 09:05:49
|
Anfänger
|
|
Registriert seit: Feb 2009
Alter: 46
Beiträge: 12
|
|
AW: koppelentität zwischen 2 tabellen
denke ich habs verstanden.
der primary key der lookup tabelle darf dann aber nicht auto increment sein richtig? denn ich möchte ja pro film auch mehrere darsteller eintragen können.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 09:10:54 Uhr.
|