John M.: Arrays in MySQL-Datenbank speichern und auslesen

Beitrag lesen

Ok, soweit klar. Ich habe erst jetzt verstanden, dass ihr mit "Kat" wohl Kategorie also ein Schlagwort meintet. Dann wäre diese Tabelle hier sozusagen eine Liste der Schlagworte.

Genau.

Jetzt möchtest Du aus der Tabelle "Bilder" diese zwei Kategorien dem Bild mit der Nummer 3 zuordnen. Dann sähe Deine 2. Tabelle so aus: [...]
Stopp mal, welche Tabelle ist das jetzt? Wir haben ja nun Tabelle1 (da sind alle Bilder gespeichert, inkl. Auflösung) und Tabelle2 (da sind alle Schlagwörter gespeichert). Und diese Tabelle ist dann eine dritte Tabelle, in der bei jedem Datensatz eine Bild ID und eine Schlagwort ID stehen?

Ja. Verwende am Besten sprechende Namen, also z.B. "Bilder" für die Tabelle mit den Bildern, "Kategorien" für die Tabelle mit den Schlagworten und "Zuordnung" für die Tabelle, welche die Verbindung zwischen den Bildern und den Kategorien herstellt. Dann gibt's weniger Missverständnisse :)

Wie würde ich denn die Zuordnungstabelle im richtigen Einsatz nennen? Einfach Zuordnung wäre blöde, eher soetwas wie Zuordnung_Bilder-Schlagworte, bzw. auf Englisch. Was wäre da gut?

Nee, mir ist schon klar wie man einen normalen INSERT macht.
Aber in diesem Fall ist das ja etwas anders.
Angenommen ein User ordnet einem Bild 5 Schlagwörter zu.
Dann ergänze ich die dritte Tabelle (Bild_ID, Schlagwort_ID) jeweils um 5 Einträge.

Willst Du die Schlagwörter nutzerbezogen speichern?

Nein, aber die Nutzer selbst entscheiden darüber, welches Bild welche Schlagworter bekommt. Daher... (s.u.)

Aber jetzt habe ich ein Problem:
Wenn ein User einem Bild ein neues Schlagwort zuordnen will, muss ich erstmal gucken, welche Schlagworte das Bild hat und überprüfen, ob das Schlagwort nicht schon dabei ist.

Biete dem Nutzer doch einfach bereits verwendete Schlagworte nicht mehr zur Auswahl an, indem Du vor Augabe des Formulars via PHP die aktuell vergebenen Schlagworte abfragst.

...geht das so nicht. Die Nutzer müssen sowohl die Möglichkeit haben, bereits bestehende Schlagworte zu löschen, neue Schlagworte zu erfinden und bereits vorhandene Schlagwort zu ändern (zu korrigieren). Ein Nutzer sieht also ein Bild mit fünf Schlagworten. Er kann selbst ein neues Schlagwort hinzufügen (sich frei ausdenken). Gibt es dieses noch nicht, wird es in die Schlagworttabelle übernommen. Sieht er aber ein falsch geschriebenes Schlagwort, soll er dieses auch korrigieren können. Es müssen also alle vorhandenen Schlagwörter angezeigt werden und beim Speichern müssen alle Schlagworte überprüft werden. Das könnte ziemlich aufwendig sein.

Für das Ersetzen werde ich wohl den Vorschlag von Chris (REPLACE) nehmen, das ist für das Problem des Hinzufügens neuer Schlagwörter genau das richtige. Trotzdem habe ich immernoch Performancebedenken.