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 ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign 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/MySQLi

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

Thema geschlossen
 
Themen-Optionen Ansicht
  #1  
Alt 17.09.2013, 18:25:25
loddoking loddoking ist offline
Anfänger
 
Registriert seit: Sep 2013
Alter: 41
Beiträge: 14
MySQL - Filmdatenbank - Filmtitel/Darsteller Abfrage

Ja, hallo erstmal...
Da ich mich neuerdings seit Jahren wieder mit mysql beschäftige sind meine Kenntnisse wtwas eingerostet. Also bitte etwas nachsicht üben.

Ich bastle zur zeit an einer etwas umfangreicheren Filmdatenbank.
Ich habe, vereinfacht dargestellt hier erstmal zwei Tabellen.

Darsteller
Darsteller_ID (Primärschlüssel), Name, Gebutsdatum usw...

Filme
Film_ID (Primärschlüssel), Filmtitel, Produktionsjahr usw..., Darsteller_ID 1, Darsteller_ID 2 usw...bis Darsteller_ID 70


Um redundante daten zu vermeiden habe ich nur in der Filmtabelle alle Dasteller_IDs aufgeführt die in dem Film vertreten sind.
Ich weiss nicht ob das die beste Möglichkeit für das Problem Film/Darsteller war. Aber andersherum wäre noch mehr Redundanz aufgetreten.

Ich habe nun die Dasteller_ID aus der Darstellertabelle als Primärschlüssel mit sämtlichen Darsteller_IDs in der Filmtabelle als Fremdschlüssel verknüpft.
Das Problem ist nun, dass ich bei der Abfrage nach Filmtitel und Darsteller ja nun kaum alle 70 Darsteller_ID Spalten in der Filmtabelle einzeln berücksichtigen kann.
Aber damit das gewünschte Ergebniss erfolgt müsste doch genau dies geschehen oder?

Per phpMyAdmin habe ich nun die einfache Abfrage mal zusammengeklickt die allerdings nur immer die erste Darsteller_ID Spalte in der Filmtabelle berücksichtigt.
Da aber nun der selbe Dasteller manchmal auch erst in der zweiten, dritten usw. Spalte auftritt bekomme ich immer nur ein unvollständiges Ergebniss!


SELECT `darsteller`.`Darstellername` , `filme`.`Filmtitel`
FROM `filme`
LEFT JOIN `filmdatenbank`.`darsteller` ON `filme`.`Darstller_ID` = `Darsteller`.`Darsteller_Id`
ORDER BY `darsteller`.`Darstellername` ASC
LIMIT 60 , 30


Gibt es da einen eleganteren Weg das Problem anzugehen? Oder habe ich da einen grundsätzlichen Fehler in der Datenbankstruktur drinn nach dem das gewünschte Ergebniss gar nicht erfolgen kann?

Die Abfragen sollen jeweils entweder alle Filmtitel zu einem Darsteller oder alle Darsteller zu einem Filmtitel liefern.
  #2  
Alt 18.09.2013, 01:29:25
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage

Hi

Zitat:
kaum alle 70 Darsteller_ID Spalten
Genau deswegen 3te Tabelle, nimm die 70 da raus...

Filme_Darsteller
Film_ID,Darsteller_ID

Bitte schaue dir dazu vielleicht auch (zum 1000sten mal erwähnt hier im Forum)
http://de.wikipedia.org/wiki/Normali...28Datenbank%29
an

MfG

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
  #3  
Alt 18.09.2013, 14:53:14
loddoking loddoking ist offline
Anfänger
 
Registriert seit: Sep 2013
Alter: 41
Beiträge: 14
AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage

@Ckaos: Danke erstmal für deine Antwort.
Das mit der Normalisierung war eigentlich ein Thema dass ich erst zu einem späteren Zeitpunkt in Angriff nehmen wollte. Aus dem Informatik Unterricht vor vielen JAhren wurde uns das damals ja so verdeutlicht das man erstmal die Datenbankstruktur und menge der Tabellen im anfangsstadium so klein wie möglich halten sollte und die Normalisierung und optimierung erst später drann kommt.

Ich habe das jetzt mal wie vorgeschlagen gemacht und die Darsteller_IDs aus der Filmtabelle getrennt und mit der Film_ID zusammen eine zwischentabelle daraus gemacht.
Die Verknüpfung sieht jetzt folgendermaßen aus:

Filme
Film_ID (Primärschlüssel), Filmtitel, Produktionsjahr usw...

Filme_Darsteller
Film_ID (Primärschlüssel), Darsteller_ID 1, Darsteller_ID 2 usw...(Fremdschlüssel)

Darsteller
Darsteller_ID (Primärschlüssel), Name, Gebutsdatum usw...


Bei der einfachen Abfrage kommt natürlich nur murks raus...
Es werden sämtliche Darsteller mit sämtlichen Filmen angezeigt die in keinem bezug zueinander stehen.

Code:
SELECT `darsteller`.`Darstellername` , `filme`.`Filmtitel`
FROM `filme` , `darsteller`
LIMIT 0 , 30
Arbeite ich hinggegen mit Join wie in meinem ersten versuch bekomme ich nur die Darsteller der ersten Darstellerspalte in der zwischentabelle.

Mir ist nicht ganz klar wie ich diese simple Abfage gestalten soll um das gewünschte Ergebniss zu bekommen.
Die zweischetabellle Filme_Darsteller gibt dem ganzen zwar mehr Struktur aber macht die Abfragen irgendwie noch kopmlizierter...:(
  #4  
Alt 18.09.2013, 16:03:20
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage

Das hast du fasch verstanden.
Die dritte Tabelle besteht aus genau 2 Feldern (eventuell ein Zusammengesetzter Primärschlüssel).

1 Filme_ID
2.Darsteller_ID

Für jeden Film fügst du nun entsprechende Datensätze mit den darstellern ein.

Code:
Bsp:
Filme:
ID  TITEL
1    Forrest Gump
2    Noch drei Männer und ein Baby

Darsteller:
ID  NAME
1   Tom Hanks
2   Gary Sinise 
3   Tom Sellek 
4   Ted Danson

Besetzung:
Film_ID   Darsteller_ID
1             1
1             2
2             3
2             4
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
  #5  
Alt 18.09.2013, 16:49:52
loddoking loddoking ist offline
Anfänger
 
Registriert seit: Sep 2013
Alter: 41
Beiträge: 14
AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage

@sysop: OK, dann hab ich es wohl falsch verstanden.
Aber leider lässt sich diese Version dann nicht realisieren.

Die Datensätze die ich importieren möchte liegen nunmal in eben dieser Form in den csv Files vor.
Also, die einzelnen Darsteller zum Film in Spalten. Ich habe keine vorstellung wie man das nun umdrehen könnte das daraus zeilen werden.
Abgesehn davon führt das doch zu einer ungeheuren menge an zusätzlichen Datensätzen in der Tabelle Besetzung.

Nur mal als Anhatspunkt, ich rede hier von etwa 20 000 Datensätzen für Darsteller und etwa 10 000 für Filme. Hinzu kommen später nochmal ein paar Tabellen für Serien, Kurzfilme usw... die zusammengenommen nochmal um die 20 000 Datensätze beinhalten.

Wenn man zb von 100 Filmen mit jeweils 10 Darstellern ausginge sind das schon 1000 Datensätze in der Besetzungstabelle.
Führt das nicht zu noch mehr Redundanz da dann die FilmID unnötigerweise vielfach vorkommt?

Ich weiss noch das wir das damals im Informatikunterricht angeschnitten hatten. Dass man ein Primärschlüssel mit mehrfachen Fremdschlüsseln in der Zieltabelle verknüpfen kann. Sowas ähnliches hatten wir damals auch gemacht. Ich weiss nur nichtmehr wie das genau ging.

Im grunde geht es ja darum dass automatisch in der Filmtabelle/Besetzungstabelle jede einzelnde der 70 Darsteller_ID Spalten mit der Darsteller_ID Spalte in der Darsteller Tabelle verglichen werden, wo dann der Name und weitere Infos drin stehen.

Um die Performance brauch ich mir zu diesem Zeitpunkt dann noch keine großen Gedanken zu machen. Da aller Voraussicht nach das ganze wohl eh nur ein Privatprojekt bleiben wird, sind auch keine hohen Zugriffzahlen usw. zu erwarten.
  #6  
Alt 18.09.2013, 18:24:17
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 72
Beiträge: 4.001
AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage

Zitat:
Zitat von loddoking Beitrag anzeigen
@sysop: OK, dann hab ich es wohl falsch verstanden.
Da haste den Sysop falsch verstanden. Der hat Dir gezeigt, wie es ordentlich gemacht wird.
Zitat:
Aber leider lässt sich diese Version dann nicht realisieren.
Die Datensätze die ich importieren möchte liegen nunmal in eben dieser Form in den csv Files vor.
Dann hast Du eben das Pech, daß Du aus dem Schrott Dir die für eine ordentliche Datenbank erforderlichen Daten rausklaubst.
Zitat:
Führt das nicht zu noch mehr Redundanz da dann die FilmID unnötigerweise vielfach vorkommt?
Nein, wenn die film_id + darsteller_id ZUSAMMEN einen primary_key bilden.

Du liest die Filme teilenweise ein. Filmtitel, Erscheinungsjahr, Inhalt (KA, was in der CSV Liste so alles rumschwirrt) erledigst Du ein INSERT, fragst insert_id ab. Dann nimmsste Dir die Darstellerspalten vor: bei jedem Darsteller guckste erst nach, ob der schon in der Darstellertabelle ist. Falls ja, haste die Darsteller id, falls nicht: INSERT + insert_id.
Mit den beiden ID machste in die Besetzungstabelle einen INSERT.

Und weil diese Aktion sicher länger als 30sec. dauert, mußte Dir was einfallen lassen, weil sonst PHP nach 30 sec. abbricht.
  #7  
Alt 18.09.2013, 19:20:18
loddoking loddoking ist offline
Anfänger
 
Registriert seit: Sep 2013
Alter: 41
Beiträge: 14
AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage

Zitat:
Zitat von meikel Beitrag anzeigen
Da haste den Sysop falsch verstanden. Der hat Dir gezeigt, wie es ordentlich gemacht wird.

Dann hast Du eben das Pech, daß Du aus dem Schrott Dir die für eine ordentliche Datenbank erforderlichen Daten rausklaubst.

Nein, wenn die film_id + darsteller_id ZUSAMMEN einen primary_key bilden.

Du liest die Filme teilenweise ein. Filmtitel, Erscheinungsjahr, Inhalt (KA, was in der CSV Liste so alles rumschwirrt) erledigst Du ein INSERT, fragst insert_id ab. Dann nimmsste Dir die Darstellerspalten vor: bei jedem Darsteller guckste erst nach, ob der schon in der Darstellertabelle ist. Falls ja, haste die Darsteller id, falls nicht: INSERT + insert_id.
Mit den beiden ID machste in die Besetzungstabelle einen INSERT.

Und weil diese Aktion sicher länger als 30sec. dauert, mußte Dir was einfallen lassen, weil sonst PHP nach 30 sec. abbricht.
Ich sagte ja dass es ein paar Jährchen her is.;)
Da müsst ich mich erstmal n paar Tage schlau machen um diese Variante überhaupt anzugehen und über das phpMyAdmin brauch ich es erst gar nich zu versuchen.

Würde es einen unterschied machen wenn ich das über ein Tool wie HeidiSQL mache und dord das Query ausführe?

Mir wär es am liebsten wenn die Daten so bleiben könnten wie sie sind ohne umstrukturierung, auch wenn dadurch die anzahl der möglichen darsteller von vorn herein begrenzt ist.

Eventuell läst sich die vorgeschlagene Besetzungstabelle mit nur zwei spalten als zusammengesetztes Primärschlüssel ja auch mit externen mitteln erzeugen. CSV Files sind ja sehr flexibel in der hinsicht.

Mir ist nur nicht ganz klar wie das am ende mit der eingabe neuer Datensätze funktionieren soll wenn man zb einen neuen Film eingibt mit all seinen daten in der Filmtabelle also in verschiedenen Spalten aber dann die einzelnen Darsteller in einer weiteren Tabelle aber Zeilenweise jeweils als neuer Datensatz. Das wären dann doch zwei unterschidliche paar schuhe oder?
Wenn das dann auch noch einhergeht mit der eingabe neuer Darsteller kommt man doch in teufels küche. Da ja dann automatisch ein neuer Datensatz (zusammengesetzter Primärschlüssel) in der Besetzungstabelle erzeugt werden müsste der aus jeweils ebenfalls automatisch erzeugten IDs aud der Darsteller- und Filmtabelle besteht!?

Das weitere Problem ist dass da auch noch mindestens 5 weitere Tabellen für Serien, Kurzfilme, Musikvideos usw dazukommen. Die sollen ebenfalls mit der Darstellertabelle verknüpft werden. So dass ich am ende über ein Frontend bequem einen Darstellernamen eingebe und ich sämtliche Filme, Serien usw angezeigt bekomme. Umgekehrt selbstvertändlich ebenso bei der eingabe eines Filmes oder Serie usw. alle Darsteller.

Aber ihr habt ja recht. Wenn eine Kategorie in einer Tabelle mehrfach bis unbegrenzt vorkommt muss sie eigentlich zeilenweise als selbstständiger Datensatz eingegeben werden.

Ich versteh aber nicht wiedo es dann prinzipiell möglich ist ein Primärschlüssel mit zich Fremdschlüsseln in einer Zieltabelle zu verknüpfen? Dann müsste doch eine Abfrage über diese Verknüpfung möglich sein oder?

Aber danke schonmal für die Tipps. Auch wenn ich nun noch konfuser bin als vorher :)
  #8  
Alt 18.09.2013, 19:49:07
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 72
Beiträge: 4.001
AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage

Also noch mal das Prinzip:
Tabelle mit allen Filmtiteln: film_id, <was Du sonst noch so brauchst>; pk, auto_increment
Tabelle mit allen Schauspielern: darsteller_id,<was Du sonst noch so brauchst>; pk, auto_increment
Tabelle für die Filmbesetzung: film_id, darsteller_id, pk -> film_id+darsteller_id, kein auto_increment

wenn Du wissen willst, wer alles im Film mit der film_id= 47 mitgespiel hat
Code:
SELECT darsteller_id,<was Du sonst noch wissen willst> FROM besetzung WHERE film_id = 47;
und wenn Du wissen willst, in welchen Filmen Schauspieler mit der darsteller_id = 123 mitgespiel hat:
Code:
SELECT film_id,<was Du sonst noch wissen willst> FROM besetzung WHERE darsteller_id = 123;
Den fehlenden Filmtitel oder Darstellername holst Du Dir mit einem Join aus der film oder darsteller Tabelle.

Doubletten in der besetzung Tabelle kann es nicht geben, weil ein Schauspieler nur einmal in der Besetzungsliste auftaucht - selbst dann, wenn er eine Doppelrolle spielt.
Zitat:
CSV Files sind ja sehr flexibel in der hinsicht.
Die Idee, wegen einer Abfrage kilometerlange CSV Files umzugraben, solltest Du vergessen.
Zitat:
... ein Tool wie HeidiSQL...
Kenn ich nicht. Mir reicht der PMA völlig aus.
  #9  
Alt 18.09.2013, 20:21:29
loddoking loddoking ist offline
Anfänger
 
Registriert seit: Sep 2013
Alter: 41
Beiträge: 14
AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage

@meikel: das Prinzip der Abfrage bei der Basetzungstabelle ist mir schon klar. Ist ja kein Hexenwerk wenn da ja eh zu jeder möglichen Film/Darsteller kombination ein eigener Datensatz existiert.
Und das ich die Tabellen entsprechend so umbauen kann glaube ich schon.

Was mir aber Bauchschmerzen verursacht ist die spätere Dateneingabe wenn ich es mit rund 7 Tabellen (1 Darsteller + 6 verschiedene Film, Serien usw..) zu tun habe. Dazu kommen ja dann nochmal 6 Besetzungstabellen.
Die befüllung der Darsteller und Film/Serie usw. Tabellen ist ja nich weiter schwer. Wie man aber nun bewerkstelligt dass die zugehörigen Besetzungstabellen automatisch mit den richtigen Werten befüllt werden!?
Es muss ja dann jedesmal ein zweispaltiger Datensatz aus den zwei IDs erstellt werden die per auto_increment in den Ursprungstabellen erzeugt wurden.

So wie ich es ja verstanden habe muss ja bei jedem neuen datensatz in den Darsteller und/oder Film/Serie... Tabellen ja auch ein neuer Datensatz in einer oder mehreren Besetzungstabellen. Es sei denn natürlich der Darsteller/Film enthält keine weiteren in bezug stehenden Daten.

Geändert von loddoking (18.09.2013 um 20:31:54 Uhr)
  #10  
Alt 18.09.2013, 21:16:02
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.680
AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage

Zitat:
Zitat von loddoking Beitrag anzeigen
[..]
Was mir aber Bauchschmerzen verursacht ist die spätere Dateneingabe wenn ich es mit rund 7 Tabellen (1 Darsteller + 6 verschiedene Film, Serien usw..) zu tun habe. Dazu kommen ja dann nochmal 6 Besetzungstabellen.
Hier hast Du das Prinzip noch immer nicht verstanden. Mehr als die DREI beschriebenen Tabellen benötigst Du nicht (- bei den Informationen die uns bisher vorliegen). Ob es sich um meinen Film oder eine Serie oder ein Blockbuster und sonstige Kategorie handelt, kannst Du in der in der FILM-Tabelle mit ablegen oder gleich eine 4. Tabelle (Kategorien) aussortieren und alles wieder über Schlüssel (*_ID) miteinander verbinden.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Thema geschlossen


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
Brauche Hilfe Partygirl MySQL/MySQLi 10 01.03.2011 09:18:11
Ergebnisse aus MySQL Abfrage, obwohl Abfrage eigentlich leer mauritius MySQL/MySQLi 1 15.09.2010 16:16:30
MySQL Abfrage innerhalb einer Abfrage HariboGold MySQL/MySQLi 4 27.08.2008 18:00:28
Problem mit MySQL IF Abfrage und 0 bzw. NULL Wert flashsurface MySQL/MySQLi 2 15.06.2008 22:21:09
MySQL Abfrage mit PHP ausgeben, wie? PHP-MySQL-Fan MySQL/MySQLi 5 22.05.2006 15:47:23


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:26:48 Uhr.


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


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