SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Das Zend Framework

Das Zend Framework zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQL

MySQL Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQL diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 25.02.2009, 13:37:14
onomo onomo ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 41
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
Mit Zitat antworten
  #2  
Alt 25.02.2009, 13:54:46
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 43
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.
Mit Zitat antworten
  #3  
Alt 25.02.2009, 14:16:24
onomo onomo ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 41
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.
Mit Zitat antworten
  #4  
Alt 25.02.2009, 15:07:36
merowinger merowinger ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 33
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.
Mit Zitat antworten
  #5  
Alt 25.02.2009, 15:19:11
onomo onomo ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 41
Beiträge: 12
AW: koppelentität zwischen 2 tabellen

Zitat:
Zitat von merowinger Beitrag anzeigen
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?
Mit Zitat antworten
  #6  
Alt 25.02.2009, 15:32:45
merowinger merowinger ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 33
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 ;)
Mit Zitat antworten
  #7  
Alt 25.02.2009, 15:39:15
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 43
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 15:44:52 Uhr)
Mit Zitat antworten
  #8  
Alt 26.02.2009, 16:24:04
onomo onomo ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 41
Beiträge: 12
AW: koppelentität zwischen 2 tabellen

Zitat:
Zitat von Crisps Beitrag anzeigen
(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 ;)
Mit Zitat antworten
  #9  
Alt 27.02.2009, 09:33:04
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 43
Beiträge: 274
AW: koppelentität zwischen 2 tabellen

Zitat:
Zitat von onomo Beitrag anzeigen
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 Beitrag anzeigen
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 09:33:52 Uhr)
Mit Zitat antworten
  #10  
Alt 27.02.2009, 10:05:49
onomo onomo ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 41
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.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mehrere Beziehungen zwischen zwei Tabellen erstellen xCube MySQL 4 24.09.2008 15:30:45
Inhalte aus UTF-8 Tabellen in ISO-Tabellen übertragen Alwin20 MySQL 0 09.07.2008 13:23:02
2 Tabellen vermischen thorben MySQL 9 10.10.2007 00:06:24
2 Tabellen zusammenfassen. Problem! basti123456 MySQL 4 03.02.2006 09:01:08
Tabellen innerhalb von Zelle andreaskf HTML, CSS und JavaScript Help! 5 29.04.2005 18:20:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:59:04 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.


© 2001-2019 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt