logisches Problem mit 2 Tabellen

mychastic

Mitglied
Hallo,

so langsam bin ich am verzweifeln.

Ich habe 2 Tabellen 'article' und 'company' - jeder Artikel ist einer Firma zugewiesen. Einen neuen Artikel lege ich per Formular an.
Soweit so gut - das hat bisher auch super funktioniert.

Nun zu meinem Problem:

Ich möchte das ganze soweit ändern, dass ich einem Artikel mehrere Firmen zuweisen kann.
Im Formular habe ich nun schon eine Mehrfachauswahl ermöglicht. Das wars aber auch schon...irgendwie fehlt mir jetzt das Verständnis, wie das nun weiter laufen soll.

Wenn ich im Formular dann eine Mehrfachauswahl tätige, speichert er dies ja als Array. Wie bekomme ich es nun hin, dass er dann in die Datenbank für jeden Artikel mehrere Firmen einträgt?

Hoffe ihr könnt mir helfen.
 
Hi,

dafür solltest Du Dein Datenbankmodell so ändern, dass Du eine Firmen-, eine Artikel- und eine Relationstabelle hast, in der Du nur über die IDs speicherst, welche Firma welchen Artikel führt.
Das Stichwort heißt Normalisierung.

LG
 
Ok, danke schon einmal dafür. Also ich habe nun die Relationstabelle article_has_company angelegt mit den Feldern: aid(Primärschlüssel von 'article') und cid(Primärschlüssel von 'company').

Aber wie realisiere ich es nun, dass die Werte, die über das Formular eingetragen werden in 'article' und 'article_has_company' gespeichert werden? Also mit der gleichen aid?
 
Hi,

in article speicherst Du das gar nicht mehr. Dafür ist die Relationstabelle da. Dafür musst Du natürlich Deine Abfragen anpassen.
Wenn Du eine select-Box mit Mehrfachauswahl hast, so dass immer alle Firmen, die den Artikel führen, markiert sind, gehst Du so vor:

1. Lies alls Firmen-IDs für den Artikel aus der Relationstabelle und pack die in ein Array. Dann durchläufst Du das gepostete Array und machst für jede Firmen-ID, die nicht in der Datenbank vorhanden ist, ein INSERT.
2. Lösche für den Artikel alle Firmen-IDs, die nicht im geposteten Array vorhanden sind.

LG
 
Ok, Schonmal ein riesen Danke an dich! Hoffe du kannst mir nun noch ein paar kleine Verständnisfragen beantworten :)

1) Inwiefern muss ich meine Abfrage anpassen? Ich möchste ja immer noch den Namen etc des Artikels eingeben und in der Datenbank speichern.

2) Also soll ich dann das Array per foreach-Schleife auslesen und per INSERT Befehl in die Tabelle article_has_company speichern?! Wie bekomm ich dann aber die gleiche aid aus der Tabelle 'article' oder denk ich da gerade komplett falsch?


*Bin noch etwas neu - sorry*
 
Hi,

1) Du musst die Abfragen ändern, mit denen Du bis jetzt ausgelesen hast, welche Firma den Artikel führt. Das wird jetzt nicht mehr in article nachgehalten.

2) Wenn Du Dein Formular zum Ändern eines Artikels aufbaust, musst Du halt zusehen, dass die Artikel-ID irgendwie mit übertragen wird. Das könntest Du z.B. als hidden-Field oder als GET-Parameter machen.
Das gepostete Array durchläufst Du mit foreach und machst aber nur ein INSERT, wenn die Firmen-ID noch nicht in der Datenbank steht (deshalb musst Du das vorher aus der DB auslesen). Du kannst die fehlenden IDs auch per array_diff() ermitteln.

LG
 
Nein das Formular ist nicht zum ändern, sonder nur zum einfügen gedacht.
Aber in das Formular gebe ich doch dennoch den Namen, Beschreibung usw. an, aber das kann ich ja dann nicht in der Relationstabelle speichern, da da ja nur die 2 Fremdschlüssel enthalten sind?

Also irgendwie hab ich da ne Blockade im Kopf, die mir das ganze logisch vorkommen lässt :D
 
Hi,

dann fügst Du halt erst den Artikel ein, mysql_insert_id() liefert Dir die ID des gerade angelegten Artikels, dann kannst Du die Relationstabelle füllen.

LG
 
Ohje nun stehe ich vor dem nächsten Problem:

Ist es möglich per Formular und 1 Submitbutton in 2 Tabellen zu schreiben? Wenn ja wie genau kann man das realisieren?

Ich möchte nun quasi den Namen, etc in die Tabelle 'article' speichern und die CID in die Tabelle 'article_has_company'.

mfg
 
Zurück