ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
210
210
EMPFEHLEN
-
Hi Leute,
Ich kenne diese Seite schon ziemlich lange, und habe sehr oft sachen gefunden die mir weiter geholfen haben.
Danke !
Aber diesmal habe ich ein (für mich) echt kompliziertes Problem.
Eigentlich bin ich ein freestyler was PHP codes angeht.
Hab alles irgendwie aus dem Internet gelehrnt. Damit will ich nur sagen das ich kein super Coder bin oder so.
Nun zum Problem.
Ich habe mehrere Tabellen die ich mit einer abfrage über JOIN anspreche. Und es funktioniert alles wunderbar.
Aber in der JOIN abfrage habe ich auch eine Tabelle die mehrere (4) fremdschlüsseln einer anderen Tabelle enhält.
Jetzt habe ich mir überlegt, entweder lasse ich es so wie es ist, kann aber nur mit einem fremdschlüssel arbeiten, oder ich mach eine Kreuztabelle.
Gedacht getan.
Am Ergebnis hat sich aber nichts geändert. Bekomme auch nur ein statt 4 einträge.
Jetzt zu meiner Frage.
Wenn ich ohne Kreuztabelle arbeite, wie spreche ich die anderen fremdschlüsseln an ****?
Und wenn ich mit Kt arbeite, ... eigentlich stelt sich die gleiche Frage. Wie spreche ich diese an ****?
das wäre die Abfrage ohne KTPHP-Code:$abfrage_produktion = mysql_query("SELECT * FROM $tb_beitrag
LEFT JOIN $tb_prod_beitrag_kt
ON $tb_beitrag.beitrag_id = $tb_prod_beitrag_kt.beitrag_f_id
LEFT JOIN $tb_dreh_beitr_kt
ON $tb_beitrag.beitrag_id = $tb_dreh_beitr_kt.beitrag_f_id
LEFT JOIN $tb_beitr_schnitt_kt
ON $tb_beitrag.beitrag_id = $tb_beitr_schnitt_kt.beitrag_f_id
LEFT JOIN $tb_schnitt
ON $tb_beitr_schnitt_kt.schnitt_f_id = $tb_schnitt.schnitt_id
LEFT JOIN $tb_schnittplatz
ON $tb_schnitt.schnittplatz_f_id = $tb_schnittplatz.sp_id
LEFT JOIN $tb_dreh
ON $tb_dreh_beitr_kt.dreh_f_id = $tb_dreh.dreh_id
LEFT JOIN $tb_kfz
ON $tb_dreh.kfz_f_id = $tb_kfz.kfz_id
LEFT JOIN $tb_produktion
ON $tb_produktion.produktion_id = $tb_prod_beitrag_kt.produktion_f_id
LEFT JOIN $tb_personal
ON $tb_produktion.personal_kamera_f_id = $tb_personal.personal_id
LEFT JOIN $tb_pers_funkt_kt
ON $tb_personal.personal_id = $tb_pers_funkt_kt.personal_f_id
LEFT JOIN $tb_funktion
ON $tb_pers_funkt_kt.funktion_f_id = $tb_funktion.funktion_id");
Wobei, mir fehlen noch andere FS, die ich nicht eingetragen habe weil sonst die Abfrage nicht funktionieren würde.
Die Betreffenden tabellen wären $tb_dreh und $tb_personal.
PHP-Code:$abfrage_produktion = mysql_query("SELECT * FROM $tb_dreh
LEFT JOIN $tb_dreh_schnitt_kt
ON $tb_dreh.dreh_id = $tb_dreh_schnitt_kt.dreh_f_id
LEFT JOIN $tb_personal_dreh_kt
ON $tb_personal_dreh_kt.pd_dreh_f_id = $tb_dreh.dreh_id
LEFT JOIN $tb_personal
ON $tb_personal.personal_id = $tb_personal_dreh_kt.pd_personal_f_id
LEFT JOIN $tb_kfz
ON $tb_dreh.kfz_f_id = $tb_kfz.kfz_id
LEFT JOIN $tb_schnitt
ON $tb_dreh_schnitt_kt.schnitt_f_id = $tb_schnitt.schnitt_id
LEFT JOIN $tb_schnittplatz
ON $tb_schnitt.schnittplatz_f_id = $tb_schnittplatz.sp_id
LEFT JOIN $tb_beitr_schnitt_kt
ON $tb_schnitt.schnitt_id = $tb_beitr_schnitt_kt.schnitt_f_id
LEFT JOIN $tb_beitrag
ON $tb_beitr_schnitt_kt.beitrag_f_id = $tb_beitrag.beitrag_id
LEFT JOIN $tb_event
ON $tb_event.event_id = $tb_dreh.event_f_id");
Das wäre der Code mit KT.
Hier Betreffenden Tabelen sind $tb_dreh, $tb_personal, und $tb_personal_dreh_kt
Bin für jede Hilfe dankbar.
-
Hast du mal ein Duagram dass die Zusammenhänge aufzeigt? Dann versteh ich ev. den mit abkürzungen überfüllten Text und auch was du unter Kreuztabelle verstehst.
Schreib auch welche Tabelle die mit den 4 Schlüsseln ist und zu welchen Tabellen diese dann gehören.
PS: Aliase auf die Tabellennamen verhindern zuviele PHP-Variablen innerhalb des SQLs
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
SELECT * FROM {$tb_dreh} AS d LEFT JOIN {$tb_dreh_schnitt_kt} AS dskt ON d.dreh_id = dskt.dreh_f_id LEFT JOIN {$tb_personal_dreh_kt} AS pdkt ON pdkt.pd_dreh_f_id = d.dreh_id LEFT JOIN {$tb_personal} AS p ON p.personal_id = pdkt.pd_personal_f_id LEFT JOIN {$tb_kfz} AS kfz ON d.kfz_f_id = kfz.kfz_id LEFT JOIN {$tb_schnitt} AS s ON dskt.schnitt_f_id = s.schnitt_id LEFT JOIN {$tb_schnittplatz} AS sp ON s.schnittplatz_f_id = sp.sp_id LEFT JOIN {$tb_beitr_schnitt_kt} AS bskt ON s.schnitt_id = bskt.schnitt_f_id LEFT JOIN {$tb_beitrag} AS b ON bskt.beitrag_f_id = b.beitrag_id LEFT JOIN {$tb_event} AS e ON e.event_id = d.event_f_id
Geändert von Yaslaw (25.10.10 um 12:35 Uhr)
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Diagramm bild habe ich hier
Das problem ist, ich bin mir einfach nicht sicher wie das zu lösen ist.
Nicht nur Code seitig, sondern auch Tabellen seitig.
Vileicht muss ich das noch mehr zerlegen.
Mit Kreuztabellen meine ich Tabelle die man für eine m:n beziehhung braucht (zwischentabelle oder wie man sie halt nennt).
Was Aliase angeht, da gebe ich dir volkommen recht. Nur mich verwirren diese irgend wie und deswegen verwende ich sie kaum.
Und danke für schnelle Antwort
Eigentlich könnte die Abfrage so lauten
(ich beschrenke mich jetzt nur auf die Tabellen die mir Probleme machen)
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13
SELECT * FROM DREH LEFT JOIN personal AS kamera ON dreh.kamera_f_id = kamera.personal_id LEFT JOIN personal AS redakteur ON dreh.redakteur_f_id = redakteur.personal_f_id LEFT JOIN personal AS ton ON dreh.ton_f_id = ton.personal_f_id . . .
Dann stellt sich aber die Frage, wie spreche ich bei der auswertung (in der while schleife) diese Aliase an ********?Geändert von daft075 (25.10.10 um 13:21 Uhr)
-
Ah, jetzt versteh ich. Du hast die Tabelle PERSONAL einmal. Aber du hast in der Tabelle DREH vier Felder die auf PERSONAL zugreiffen.
Falls das Bild aus der DB erstellt wurde, solltest du die Verknüpfung DREH-PERSONAL ändern. Die Tabelle PERSONAL müsste 4 mal auftauchen und je eine Verbindung haben.
Das SQL für die Verknüpfungen DREH-PERSONAL würde dann etwa so aussehen
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
SELECT dreh.*, redakteur.personal_name AS redakteur_name, regie.personal_name AS regie_name, kamera.personal_name AS kamera_name, ton.personal_name AS ton_name FROM dreh LEFT JOIN personal AS redakteur ON dreh.redakteur_f_id = redakteur.personal_id LEFT JOIN personal AS regie ON dreh.regie_f_id = regie.personal_id LEFT JOIN personal AS kamera ON dreh.kamera_f_id = kamera.personal_id LEFT JOIN personal AS ton ON dreh.kamera_f_id = ton.personal_id
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Das habe ich mir gedacht.
Nur der ursprunglicher gedanke war folgender.
Ich wollte unbedingt nur eine PERSONAL Tabelle haben, da ich unser Personal verwaltung so pflegen wollte.
Danke für deine Hilfe.
-
Du hast so nur eine Personal-Tabelle. Alle vier Beziehungen greiffen auf dieselbe Tabelle zu - aber nicht gleichzeitig.
Sind die Beziehungen in der DB definiert oder hast du sie nur in der Grafik so? Im 2ten Fal ist alles bestens.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Die Beziehungen sind in der DB nicht definiert. Ich dacht das macht man eben mit der JOIN anweisung.

Die Grafik habe ich mit Navicat test version gemacht.
War auch für mich einfacher zu verstehen und kontrolieren.
Ähnliche Themen
-
JOIN auf eine Tabelle und Abfrage des letzten gefüllten Wertes
Von AlexD1979 im Forum Relationale DatenbanksystemeAntworten: 9Letzter Beitrag: 19.05.10, 10:50 -
SQL Join mit einer Tabelle aus mehreren Spalten
Von louS im Forum PHPAntworten: 3Letzter Beitrag: 28.09.09, 15:59 -
Tabellen mit mehreren Fremdschlüsseln O/R Mapping mit EJB 3.0 Annotierung
Von Kaylem im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 3Letzter Beitrag: 29.09.08, 13:21 -
Inner Join mit mehreren SQL-Server Datenbanken
Von Moe1980 im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 06.05.08, 13:58 -
Join mit mehreren Tabellen
Von akkie im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 17.08.03, 12:14





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren