Erstellen eines Dynamisch erweiterbaren Updates

Hallo zusammen :smile:

ich habe eine Tabelle (DB für Homepage) erstellt die aber leicht erweiterbar sein soll.
Grund: Am Anfang sind 4 Sprachen vorhanden, wobei ohne weiters noch ein paar mehrere dazu kommen sollen.

Die Spalten heißen SprachID und dann aufsteigend Sprache1… bis z.B: Sprache14
Die SprachID gibt auskunft über die jeweilige Sprache z.B: 1 Deutsch oder 2 Französich,…
Die Sprache 1 gibt auskunft über die ID des zu übersetzenden Artikels der in die Spalte eingetragen wird.

Jetzt würde eine Zeile zB folgendermaßen aussehen:
Artikel ID: 8, SprachID: 1 und daher Sprache1: 8. Weiters würde der Artikel wenn er in anderen Sprachen vorhanden ist stehen z.B: Sprache 3: 13

JETZT IST DIE FRAGE wie programmiere ich mit php und SQL eine neue eingefügte Zeile so dass die neue Artikel ID und die bereits übersetzten bestehenden Artikel ID´s ( = Sprache 1,…) sich bei den eingetragenen Artikeln einfügen?

Danke für jegliche Hilfe.
Iwie denk ich mir dass is unmöglich. :smile:

Lg,
Chris

mach mal eine beispiel tabelle
und dein ansatz dazu .

!! wie soll man das sonst verstehen wenn man nicht davor sitzt :- !!

Hallo danke für die rasche AW

Ich hab leider keinen Screenshot machen können daher hab ich es jetzt so geschrieben:
Ich hoffe dass die Abstände beibehalten werden

So wäre die Datenbank ohne Update:
Artikle ID = Autoincreasement Artikeltext Sprach ID Sprache 1 Sprache 2 Sprache 3 usw.
3 hallo 1 3
4 hello 2 4
12 salut 3 12
24

Aussehen soll dass dann so dass sich bei einer übersetzung die Tabelle updaten soll wenn diese bereits übersetzt wurde.
Artikle ID = Autoincreasement Artikeltext Sprach ID Sprache 1 Sprache 2 Sprache 3 usw.
3 hallo 1 3 4 12
4 hello 2 3 4 12
12 salut 3 3 4 12

Das Update sollte allerdings schrittweise funktionieren, dass bedeutet es kann sein dass eine Sprache leer bleibt bis sie übersetzt wurde.
Artikle ID = Autoincreasement Artikeltext Sprach ID Sprache 1 Sprache 2 Sprache 3 usw.
3 hallo 1 3 4
4 hello 2 3 4

Das war ein übersetzter Artikel, allerdings sind in der Tabelle mehrere wie zum Beispiel hier mit 2 unterschiedlichen Artikeln
Artikle ID = Autoincreasement Artikeltext Sprach ID Sprache 1 Sprache 2 Sprache 3 usw.
3 hallo 1 3 4 12
4 hello 2 3 4 12
12 salut 3 3 4 12
14 Hilfe 2 32 14 18
18 Help 3 32 14 18
32 Ayuda 1 32 14 18

Bis jetzt hätt ich dass immer mit einer IF Bedingung gemacht zum Beispiel Insert into und anschließend Update von der Bereits Bestehenden Übersetzten Zeile Sprache 1, Sprache 2, Sprache,… und Last_Insert_ID. Wie gesagt dass funktioniert, allerdings muss ich die IF Bedingung und die dazugehörigen SQL Bedingungen erweitern. Daher hätt ich dass gern automatisch ohne bei einer neuen Sprache eine neuen IF satz +SQL schreiben muss.
Die Sprachen wieviele es gibt 1-… kann ich allerdings ohne Probleme mit einen separaten SQL query auslesen.

Danke und Lg,
Chris

Hier die Tabelle nochmal, hab gesehen das sich die Abstände geändert haben.
So wäre die Datenbank ohne Update:
Artikle ID = Autoincreasement Artikeltext Sprach ID Sprache 1 Sprache 2 Sprache 3 usw.
3 hallo 1 3
4 hello 2 4
12 salut 3 12
24

Aussehen soll dass dann so dass sich bei einer übersetzung die Tabelle updaten soll wenn diese bereits übersetzt wurde.
Artikle ID = Autoincreasement Artikeltext Sprach ID Sprache 1 Sprache 2 Sprache 3 usw.
3 hallo 1 3 4 12
4 hello 2 3 4 12
12 salut 3 3 4 12

Das Update sollte allerdings schrittweise funktionieren, dass bedeutet es kann sein dass eine Sprache leer bleibt bis sie übersetzt wurde.
Artikle ID = Autoincreasement Artikeltext Sprach ID Sprache 1 Sprache 2 Sprache 3 usw.
3 hallo 1 3 4
4 hello 2 3 4

Das war ein übersetzter Artikel, allerdings sind in der Tabelle mehrere wie zum Beispiel hier mit 2 unterschiedlichen Artikeln
Artikle ID = Autoincreasement Artikeltext Sprach ID Sprache 1 Sprache 2 Sprache 3 usw.
3 hallo 1 3 4 12
4 hello 2 3 4 12
12 salut 3 3 4 12
14 Hilfe 2 32 14 18
18 Help 3 32 14 18
32 Ayuda 1 32 14 18

Lg,
Chris

Hallo Chris,

ich habe eine Tabelle (DB für Homepage) erstellt die aber
leicht erweiterbar sein soll.

Iwie denk ich mir dass is unmöglich. :smile:

Naja, nicht ist unmöglich :wink: aber dein Lösungsansatz scheint mir so verquer zu sein, daß er mögliche Lösungen zumindest unnötig erschwert. Wenn hier nicht noch ne tolle Lösung kommt, schlage ich dir vor, dein Problem nochmal verständlich bei den Spezialisten im Brett „SQL & Datenbankprogrammierung“ von Anfang an zu erläutern, damit die dir erstmal einen sauberen DB-Ansatz (welche Tabellen mit welchen Beziehungen untereinander) vorschlagen können.
Aus deinem Beitrag verstehe ich im Moment nur, daß es um eine Art DB-basiertes Wörterbuch in verschiedenen Sprachen gehen soll. Also irgendwie sowas

Haus (dt.) home (engl.) maison (frz.)

Aber ob ich das nun so richtig und vollständig begriffen habe und was z.B. bei Synonymen passieren soll, also

Haus (dt.) home (engl.) house (engl.)

u.ä. Probleme (Homonyme? spielen keine Rolle?) weiß ich noch nicht. Wahrscheinlich habe ich heute meinen begriffstutzigen Tag :wink:

Viele Grüße
Marvin

Hallo Chris,
ich habe mal die ganze Nacht nachgedacht :wink: und einen kleinen Ansatz für deine Tabellen gemacht. Ich schlage zwei Tabellen vor, eine Tabelle „deutsch“, die die deutschen Wörter enthält und eine zweite Tabelle „translation“ mit allen möglichen Übersetzungen. Grundstruktur wäre so:

**deutsch**
_Feld Typ_
id int(11) (autoincrement) 
wort varchar(255) 

**translation**
_Feld Typ_
dt-id int(11) 
sprache tinyint(4) 
vokabel varchar(255)



deutsch.id == translation.dt-id

Befüllt könnte das dann so aussehen:

**deutsch**
_id wort_
1 Katze
2 Haus

**translation**
_dt-id sprache vokabel_
1 1 cat
1 2 chat
2 2 maison
2 1 home

wobei sprache 1 = englisch und sprache 2 = französisch wäre. Für diese Sprachschlüssel böte sich dann noch eine dritte Tabelle an.
Das jetzt nur als allerersten, sehr verbesserungswürdigen Ansatz. Hat aber in meinen Augen den Vorteil, daß dieses unsägliche „Spalten hinzufügen“ wegfällt und trotzdem lassen sich ohne Probleme weitere Übersetzungen ins chinesische, polnische usw. hinzufügen.

Viele Grüße
Marvin

Hey danke,

genau so hab ich´s mir vorgestellt bzw gemacht.
Jedoch hab ich beim Code schreiben ein Problem.
Bis jetzt hab ich eine Schleife geschrieben die so aussieht. Sie funktioniert auch teilweise. Ich hab das Problem angezeichnet und mir fällt dazu keine Lsg. ein.

for ($count = 1; $count

Hallo chris,

genau so hab ich´s mir vorgestellt bzw gemacht.

Vorgestellt vielleicht, aber gemacht? In deinem ersten Posting jedenfalls nicht.

Jedoch hab ich beim Code schreiben ein Problem.

Und ich beim Lesen deines Codes :wink: Es wäre besser, wenn Du die pre-Tags benutzen würdest.
Aber verrate mal, wie dein Tabellenaufbau aussieht. Was sind die Tabellen tblthk, tblthe, tblkra? Es ist schon etwas spät, und ich bin zu müde, um das selbst rauszufinden :wink:

Viele Grüße
Marvin

Hey :wink:

hmm ich versuch den Tabellenaufbau mal kurz zu beschreiben. Aber ich denk mir es is besser sich eine Einfache ansicht wie:" Select * From normal_tabelle" vorzustellen.
Also ich hab die Autoincreasement IDs von tblthe und tblkra in tblthk vereint.

Das Problem liegt in dem SQL query wobei alle Werte von $SpY = ‚$SpZ‘ in jeweils eine intTID eingetragen werden soll:
UPDATE tblthe SET $SpY = ‚$SpZ‘ WHERE intTID = ‚$SpZ‘ OR intTID = 13

dabei wäre
$SpY = ‚$SpZ‘
Sp1 = 13
Sp2 = 17
Sp3 = 18
Sp4 = 34

Und intTID = ‚$SpZ‘
intTID = 13
intTID = 17
intTID = 18
intTID = 34

Aber wie funktioniert das? :smile:

Lg und einen schönen Tag,
Chris

Hallo Chris,

hmm ich versuch den Tabellenaufbau mal kurz zu beschreiben.
Aber ich denk mir es is besser

Ich glaube nicht, daß es so besser ist. Ein paar Bemerkungen:

  1. Es ist ziemlich schwer, eine SQL-Anfrage zusammenzubasteln, wenn man nicht weiss, wie die Tabellen aufgebaut sind.
  2. Wie ich schon mal sagte, vielleicht solltest Du wirklich mal im MySQL-Brett nachfragen. Du konstruierst hier zwar PHP-Befehle, aber letztendlich scheint es mir darum zu gehen, wie dein SELECT aussehen soll -> also SQL-Problem, wie Du ja schon selbst sagst:

Das Problem liegt in dem SQL query

Und was soll das denn heissen?

Also ich hab die Autoincreasement IDs von tblthe und tblkra in
tblthk vereint.

Aber wie funktioniert das? :smile:

Tja, das ist hier die Frage…
Ich glaube, das Problem für uns alle ist, daß Du uns hier Lösungsansätze zeigst, die vielleicht sogar irgendwie funktionieren, aber nicht richtig erklärst, was Du überhaupt erreichen willst (siehe auch oben deine Anfrage).
Es wäre besser, wenn Du nochmal ganz vorn erläuterst, was Du machen möchtest. Ich glaube bis jetzt folgendes verstanden zu haben:
Du hast eine Tabelle mit deutschen Wörtern und möchtest eine weitere Tabelle mit Übersetzungen dieser Wörter in verschiedene Sprachen erstellen. So weit, so gut. Beim Rest fange ich schon an, mehr zu ahnen bzw. zu raten:

  • Weitere deutsche Wörter müssen eingefügt werden, gut, relativ trivial.

  • Es muss nachgesehen werden, ob und welche Übersetzungen für ein deutsches Wort schon existieren.

  • Anschliessend sollen die fehlenden Übersetzungen auch noch eingefügt werden.

Das scheinen mir die Kernpunkte deines Projektes zu sein. Aber welcher Punkt davon dir im Moment gerade Probleme bereitet, da komme ich schon nicht mehr mit. Einfach weil sich mir der Zusammenhang mit deinen Fragestellungen nicht mehr so recht erschliesst und weil ich einfach nicht sagen kann, „klar, mach einfach sowas:
SELECT SpY FROM tblthe WHERE intTID = $SpZ …“
wenn ich Null Ahnung habe, was hinter SpY, SpZ, tblth usw. steckt. Klar, das sind Variablen, Tabellennamen usw. Bei intTID ahnt man schon, es ist ein Key einer Tabelle, aber welcher und was steckt sonst noch in den Tabellen und wie sind die Relationen der Tabellen untereinander… Viele offene Fragen.

Viele Grüße
Marvin

Hallo und Danke,

erstmals, ich hab jetzt auch schon in einen zweiten Beitrag angefangen die Lsg zu finden.
Hab es dort auf dass wesentliche beschränkt.

Hier der Link:
/t/arrays-schleifen-gegeneinander-ablaufen-lassen/64…

Sry für die ganze Verwirrung ist halt nicht einfach zu beschreiben.

Der Tabellenaufbau ist:
Spalten:
intTID = auto Increase;
strTID = der geschriebene Artikel in einer sprache
SpID = gibt auskunft anhand einer Nr. in welcher Sprache der Artikel beschrieben ist
Sp1 = Die SprachID z.B: Deutsch
Sp2 = Die SprachID z.B: English

Das Problem liegt beim Update wo ich eine for Schleife durchführe:
das Update sieht so aus z.B: Update SET Sp1 = 13 Where intTID = 13 und leider nicht so intTID = 13, intTID = 18, intTID = 24, intTID = 32,…

Da jede zeile die in der jeweiligen Sp1, Sp2,… die passende ID von der übersetzung haben soll.

Lg,
Chris

Hallo Chris,

ich hab jetzt auch schon in einen zweiten Beitrag
angefangen die Lsg zu finden.

Habe ich mir schon gedacht. Ist aber nicht sehr praktisch, aber sei es drum…
Aber erzähl das wenigstens auch den Helfern im obigen Beitrag, nicht jeder guckt gleich einen Thread weiter unten nach.

Der Tabellenaufbau ist:
Spalten:
intTID = auto Increase;
strTID = der geschriebene Artikel in einer sprache
SpID = gibt auskunft anhand einer Nr. in welcher Sprache der
Artikel beschrieben ist
Sp1 = Die SprachID z.B: Deutsch
Sp2 = Die SprachID z.B: English

Da jede zeile die in der jeweiligen Sp1, Sp2,… die passende
ID von der übersetzung haben soll.

Verstehe ich das richtig, daß je nach Bedarf auch Spalten Sp3, Sp4 usw. hinzukommen können oder sollen? Das bringt dir aber genau diese Probleme ein. Ich will ja nicht behaupten, daß mein Tabellenvorschlag genau die Superlösung ist, aber zumindest vermeidet er dein unsägliches Problem mit der variablen Spaltenanzahl. Dafür ist SQL nicht angelegt. Du hast dort Tabellen und die haben eine genau definierte Anzahl von Spalten, sprich, es kommen eigentlich keine dazu.
Klar lassen sich Spalten hinzufügen, wenn man z.B. im Laufe der Entwicklung/Benutzung merkt, daß man z.B. in einer Tabelle noch eine Spalte mit der Uhrzeit braucht. Das ist dann aber ein neuer Ansatz und hat nichts mit deinem Lösungsversuch zu tun.
Überlege es dir nochmal mit deinem Tabellenaufbau.

Viele Grüße
Marvin

Danke,

hab´s heraus gefunden. Man braucht 2 Schleifen wobei man eine in der anderen laufen lässt. :wink:

Funktioniert jetzt. Den Tabellenaufbau hab ich gleich gelassen, wollt nimma soviel überlegen. :smile:

Lg,
Chris