PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   MySQL - Filmdatenbank - Filmtitel/Darsteller Abfrage (http://www.selfphp.de/forum/showthread.php?t=25062)

loddoking 18.09.2013 20:46:34

AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage
 
Zitat:

Zitat von vt1816 (Beitrag 145502)
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.

Bei den anderen "Kategorien" handelt es sich um eigenständige Tabellen mit zum teil sehr unterschiedlichen Spalten.
Da lässt sich so einfach nicht alles zusammenlegen in einer rießigen Einzeltabelle.
Aber das ist ja hier noch nicht so von belang. Erst einmal muss das ganze ja mit den zwei Darsteller/Film Tabellen funktionieren.
Daran mach ich mich ersteinmal.
Wenn das dann soweit klappt wird wohl das erweitern um weitere Tabellen mit den anderen "Kategorien" ja nur noch ein wenig fleißarbeit erfordern.

Aber wie ich am ende die Film_Besetzungstabelle automatisch mit der Film_ID & Darsteller_ID befülle weiß ich immer noch nicht.

vt1816 18.09.2013 21:00:44

AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage
 
Zitat:

Zitat von loddoking (Beitrag 145496)
[..]
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.


Zitat:

Zitat von loddoking (Beitrag 145505)
[..]
Aber wie ich am ende die Film_Besetzungstabelle automatisch mit der Film_ID & Darsteller_ID befülle weiß ich immer noch nicht.

Um hier nicht weiter im Nebel zu stochern wäre es gut wenn Du mal 3-5 Zeilen aus der (den) csv-Datei(en) posten würdest.

loddoking 18.09.2013 21:39:01

AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage
 
Zitat:

Zitat von vt1816 (Beitrag 145506)
Um hier nicht weiter im Nebel zu stochern wäre es gut wenn Du mal 3-5 Zeilen aus der (den) csv-Datei(en) posten würdest.

Ich glaub da hab ich mich missverständlich ausgedrückt.
Mit "Aber wie ich am ende die Film_Besetzungstabelle automatisch mit der Film_ID & Darsteller_ID befülle weiß ich immer noch nicht."
meinte ich die Dateneingabe am Ende wenn alles so aufgebaut ist wie Vorgeschlagen und die Datensätze auch alle eingebaut sind.
Die Datenbank will ja gelegentlich mit neuem gefüttert werden.

Ich hane ja diese Film_Besetzungstabelle als verknüpfung. Aber die Werte darin sind ja keine auto_increment werte sondern stammen von den Ursprungstabellen die da wären Filme und Darsteller. Diese beiden Tabellen kann ich ja auch so befüllen mit neuen Datensätzen, die benötigten neuen IDs werden ja per auto_increment praktischerweise automatisch erzeugt.
Meine Frage ist, wie bekomme ich diese neuen IDs dann in die Film_Besetzungstabelle. Da muss ja für jeden neunen Datensatz in der Film und/oder Darstellertabelle, sofern ein bezug zum jeweils anderen besteht erfolgen oder?

Wie ich das mit den bestehenden Datensätzen die ich über die csv files importiert habe nun in die Film_Besetzungstabelle mit zwei Spalten hinbekomme hab ich mir schon zurechtgelegt und mit nem paar dutzend datensätzen auch schon ausprobiert. Der rest ist nur ein wenig fleißarbeit. Der aufbau der Film_Besetzungstabelle ist also insofern kein Problem mehr.

vt1816 18.09.2013 22:36:32

AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage
 
Zitat:

Zitat von loddoking (Beitrag 145507)
[..]
Die Datenbank will ja gelegentlich mit neuem gefüttert werden.

Wo ist hier Dein Problem?

Die beiden Tabellen (Film & Schauspieler) werden jeweils einzeln per Formular bzw. per Import gefüllt. Und wenn die Datensätze hinzugefügt sind kann dann mittels der jeweilgen *_IDs die Verknüpfungstabelle (via Formular o.ä.) gefüllt werden.


Oder?

loddoking 18.09.2013 23:23:13

AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage
 
Zitat:

Zitat von vt1816 (Beitrag 145506)
Um hier nicht weiter im Nebel zu stochern wäre es gut wenn Du mal 3-5 Zeilen aus der (den) csv-Datei(en) posten würdest.

Zitat:

Zitat von vt1816 (Beitrag 145508)
Wo ist hier Dein Problem?

Die beiden Tabellen (Film & Schauspieler) werden jeweils einzeln per Formular bzw. per Import gefüllt. Und wenn die Datensätze hinzugefügt sind kann dann mittels der jeweilgen *_IDs die Verknüpfungstabelle (via Formular o.ä.) gefüllt werden.


Oder?

Im prinzip is das schon klar.
Da meine Kentnisse der Materie nun schon ein weinig eingerostet is muss ich halt bei so kleinigkeiten ein wenig nachhacken wenn ich nachher nicht zehnmal soviel arbeit damit haben will um kleine Fehler mit großer wirkung auszubügeln. Sorry also wenn ich da n bissel nervig nachhacke.

Das man die Verknüpfungstabelle mit externen mitteln über ein php Frontend bei der Datensatzeingabe mit befüllen kann werd ich mir noch denken können.
Da sind ja praktisch alle möglichkeiten offen.

Wenn es da aber Datenbankintern eine automatische lösung gibt hab ich sie noch nicht gefunden. Da müsst ich schon genauere Hinweise bekommen wie das geht. So dass automatisch bei der erzeugung einer neuen Darsteller_ID / Film_ID ein Vergleich in der Besetungstabelle stattfindet und dementsprechen ein neuer Datensatz eingefügt wird.

Ckaos 19.09.2013 07:18:30

AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage
 
Hi,

Zitat:

Datenbankintern eine automatische lösung
Mir nicht bekannt, denke da wirst du ne Scriptsprache brauchen.

Also da du uns ja keine Datei mit Aufbau zeigst, rate ich mal weiter.
Ohne Scriptsprache (Handarbeit):
Du hast 2 Dateien (CSV) eine mit Darstellern (id,bla,blubb) und eine mit Filmen (id,bla,blubb,darsteller_ids...).
Du importierst die Darsteller und dann die Filmdatei (ohne darsteller_ids).
Danach machst du (leider) 70 import Dateien jeweils erste Spalte der Filmcsv und als zweite
jeweils eine der darsteller_ids.

Fertig ;)

MfG

CKaos

loddoking 19.09.2013 09:06:41

AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage
 
Zitat:

Zitat von Ckaos (Beitrag 145510)
Hi,

Du importierst die Darsteller und dann die Filmdatei (ohne darsteller_ids).
Danach machst du (leider) 70 import Dateien jeweils erste Spalte der Filmcsv und als zweite
jeweils eine der darsteller_ids.

Fertig ;)

MfG

CKaos

Jo, das wäre eine möglichkeit an die ich zuerst gedacht habe.
Wenn es nur um diese eine Tabelle ginge würd ich das auch genauso machen.
Brauch aber für später einen besseren Workflow...

Die andere wäre etwa so ähnlich:

Code:

INSERT INTO `film_besetzung` ( `Film_ID` , `Dartsteller_Id` )
SELECT `filme`.`Film_ID`, `darsteller`.`Darsteller_ID`
FROM `darsteller`
LEFT JOIN `filmdatenbank`.`filme` ON `darsteller`.`Darsteller_ID` = `filme`.`Darsteller_Id_1`

Wobei ich dann die `filme`.`Darsteller_Id_1` einfach bei jedem durchlauf um eins erhöhe. Left Join verursacht hierbei leider zuviel unnötige NULL Zellen in der Film_ID Spalte.
Ich werd da n anderen Join nehmen müssen und dann das ganze so zusammenfummeln dass ich alle 70 Spalten automatisch abklappere nacheinander.
Aber das Prinzip funktioniert soweit. Sicher gibt es aber auch noch elegantere (und kompliziertere ;)) methoden.


Vielen Dank aber schonmal an alle die sich bisher hierbei beteiligt haben. Ich wär sonst bestimmt nicht so schnell auf die möglichen Lösungsansätze gekommen.

meikel (†) 19.09.2013 20:18:28

AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage
 
Zitat:

Zitat von loddoking (Beitrag 145501)
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.

Verwende den Datentyp SET für die Kategorie. Dann bleibts bei 3 Tabellen.
Für Serien oder Fortsetzungen von Filmen solltest Du eine weitere Spalte vorsehen. Type varchar:
Code:

S1E17
Zitat:

Wie man aber nun bewerkstelligt dass die zugehörigen Besetzungstabellen automatisch mit den richtigen Werten befüllt werden!?
Na entweder verwendest Du ein Formular oder Du suchst Dir den Kram aus den CSV Files zusammen.
Zitat:

Es muss ja dann jedesmal ein zweispaltiger Datensatz aus den zwei IDs erstellt werden die per auto_increment in den Ursprungstabellen erzeugt wurden.
MySQL is dazu ein büschen zu blöde und hat keine bzw. nur eine dürftige interne Programmiersprache. Wesentlich besser wäre da PostgreSQL geeignet. Gibts für Linux und für Windows. Favorit wäre da pl/pgsql
http://www.postgresql.org/docs/9.3/i...e/plpgsql.html
Damit kannste jede Menge PHP einsparen.
Zitat:

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.
Na Du guckst erst mit SELECT nach, ob Du den Darsteller schon hast und läßt Dir die ID liefern. Falls es ihn nicht gibt, dann machste ein INSERT.

loddoking 19.09.2013 21:05:14

AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage
 
Zitat:

Zitat von meikel (Beitrag 145516)
Verwende den Datentyp SET für die Kategorie. Dann bleibts bei 3

SET werde ich mir auf jeden Fall nochmal genauer anschauen.
Aber bei den verschiedene Kategorie Tabellen hülft alles nix. Derren IDs würden sich bei einer zusammenlegung doppeln und wären somit als eindeutiges identifizierungsmerkmal unbrauchbar. Ich müsste die ID dann mit der Kategorie einen zweispaltigen Primärschlüssel machen. Das würde zwar gehen. Aber macht die sache nur unnötig kompliziert.

Es handelt sich halt um mehrere zum teil sehr verschieden Tabellen mit unterschiedlichen Spalten und anordnungen. Da alles zu einem rießigen Brei zusammenzumixen wäre gegenwärtig kontraproduktiv.

Aber ich behalte diese Überlegung im Auge im zuge der Normalisierung und wenn ich etwas mehr in der Materie drin bin.

Bis auf weiteres sollte ich also auch so weitekomen mit dem aufbau der Datenbank. Ich meld mich mit sicherheit wieder wenn es zb um das PHP Frontend geht. Da hab ich nämlich noch weniger Kenntnisse ;)

meikel (†) 19.09.2013 21:49:44

AW: MySQL - Filmdatenbak - Filmtitel/Darsteller Abfrage
 
Zitat:

Zitat von loddoking (Beitrag 145517)
Aber bei den verschiedene Kategorie Tabellen hülft alles nix. Derren IDs würden sich bei einer zusammenlegung doppeln und wären somit als eindeutiges identifizierungsmerkmal unbrauchbar.

Genau das ist ja eins Deiner Probleme: Du willst ein schlechtes Konzept aufbohren. Besser wäre es, den Kram in ein korrektes DB Design zu importieren. Klar macht das Arbeit, ein Script zu schreiben, was man nur einmal braucht, um die Designfehler auszubügeln.
Zitat:

Es handelt sich halt um mehrere zum teil sehr verschieden Tabellen mit unterschiedlichen Spalten und anordnungen. Da alles zu einem rießigen Brei zusammenzumixen wäre gegenwärtig kontraproduktiv.
Falsch. Momentan haste nicht nur einen Breitopf sondern mehrere Töppe, in denen nur Brei gekocht wird.
Zitat:

Aber ich behalte diese Überlegung im Auge im zuge der Normalisierung und wenn ich etwas mehr in der Materie drin bin.
Du kennst doch den Spruch: "Nichts ist haltbarer als ein Provisorium."
Warum sträubst Du Dich so vehement dagegen, es ausnahmsweise mal richtig anzupacken? Genug Tips gabs ja mittlerweile.
Zitat:

Bis auf weiteres sollte ich also auch so weitekomen mit dem aufbau der Datenbank.
Mit Deinem miesen Konzept wirste nicht viel Freude haben.
Zitat:

Ich meld mich mit sicherheit wieder wenn es zb um das PHP Frontend geht. Da hab ich nämlich noch weniger Kenntnisse ;)
Dann lies die Handbücher und die betreffenden FAQ.


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:04:01 Uhr.

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