Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Nicht existierende Einträge hinzufügen
Frage
Hallo allerseits,
ich habe zwei Vokabellisten, die eine ist griechisch, die andere deutsch. Möchte nun beide in die MySQL-Datenbank einfügen.
Die Vokabeln sind bereits in der richtigen Form, also:
$deutsch = array("Wort1", "Wort2" usw.)
$griechisch = array("Wort1", "Wort2" usw.)
So, nun möchte ich aber, dass nur die Vokabeln in die Datenbank eingefügt werden, die noch nicht vorhanden sind.
Er sollte also in der Datenbank suchen, ob es einen Eintrag gibt, bei dem $deutsch == "Wort1" und $griechisch == "Wort1" ist. Ist dies der Fall, soll die Vokabel nicht hinzugefügt werden.
Wie würdet ihr dieses Problem bewerkstelligen? Mit foreach?
irgendwie so?:
[code]$deutsch = array("Wort1", "Wort2");
$griechisch = array("Wort1", "Wort2");
if (count($deutsch) != count($griechisch)) exit("Noch mal nachzählen ist angesagt!");
foreach($deutsch as $test) {
$ask = "SELECT deutsch FROM words WHERE deutsch = $test AND greek = $griechisch";
$re = @mysql_query($ask);
$loo = mysql_fetch_array ($re);
}
for ($i=0;$i!=$loo["deutsch"];$i++) {
mysql_query("INSERT INTO words (deutsch, griechisch) VALUES ('".$deutsch[$i]."', '".$griechisch[$i]."')");
}[/code]
Oder wie würdet ihr das machen?
Gruß,
Üsch
Antwort 1 von Fassy91
hmm ich würde das gantz einfach machen :
fertig
ich hoffe du kannst damit was anfangen wenn net dann helfe ich dir gerne : ICQ 489471070
<?php
$deutsch = array("Wort1","wort2","usw");
$griechisch = array("wort1","wort2","usw");
if (count($deutsch) != count($griechisch)) die("Die Arrays sind net gleichlang");
$i = 0;
foreach($deutsch as $wort) {
$sql = "SELECT deutsch FROM words WHERE deutsch='$word'";
$data = mysql_fetch_array(mysql_query($sql));
if (!isset($data['deutsch'])) {
$sql = "INSERT INTO words (deutsch,griechisch) VALUES ('". $deutsch[$i] ."','" $griechisch[$i] ."')";
mysql_query($sql);
}
$i++;
}fertig
ich hoffe du kannst damit was anfangen wenn net dann helfe ich dir gerne : ICQ 489471070
Antwort 2 von rabies
Hallo,
Ich würde das ganze anders regeln.
Ich würde meinen Spalten deutsch und griechisch jeweils die Eigenschaft UNIQUE mitgeben (vgl. sie sind einzigartig).
Und dann würde ich beim Einsetzen der Variablen nicht auf INSERT sondern INSERT IGNORE setzen. Das hat zur Folge, das sobald ein Schlüsselwort (z.B. ein deutsches oder griechisches Wort) schon vorhanden ist, keine Aktion erfolgt. Es wird kein neuer Datensatz eingetragen.
Hier mal mein Code dazu:
Achtung, dieses Script funktioniert allerdings nur mit PHP > Version 5, da die Funktion array_combine vorher nicht zur Verfügung steht.
Grüße,
--rabies.
Ich würde das ganze anders regeln.
Ich würde meinen Spalten deutsch und griechisch jeweils die Eigenschaft UNIQUE mitgeben (vgl. sie sind einzigartig).
Und dann würde ich beim Einsetzen der Variablen nicht auf INSERT sondern INSERT IGNORE setzen. Das hat zur Folge, das sobald ein Schlüsselwort (z.B. ein deutsches oder griechisches Wort) schon vorhanden ist, keine Aktion erfolgt. Es wird kein neuer Datensatz eingetragen.
Hier mal mein Code dazu:
<?php
$deutsch = array("de_Testwort1", "de_Testwort2", "de_Testwort3");
$griechisch = array("gr_Testwort1", "gr_Testwort2", "gr_Testwort3");
if(count($deutsch) == count($griechisch) && count($deutsch) > 0) {
$data = array_combine($deutsch, $griechisch);
$data_curr = 0;
$sql = 'INSERT IGNORE INTO words (deutsch, griechisch) VALUES ';
foreach($data as $german => $greek) {
$sql .= '(\''.$german.'\', \''.$greek.'\')';
if($data_curr < (count($data)-1)) {
$sql .= ', ';
}
$data_curr++;
}
if(mysql_query($sql)) {
echo 'Es wurden '.mysql_affected_rows().' Vokabeln eingefügt.';
}
else {
echo 'Datensätze konnten nicht eingefügt werden.';
}
}
else {
echo 'Die Anzahl der Vokabeln stimmt nicht überein oder ist 0.';
}
?>
Achtung, dieses Script funktioniert allerdings nur mit PHP > Version 5, da die Funktion array_combine vorher nicht zur Verfügung steht.
Grüße,
--rabies.
Antwort 3 von Uesch
Vielen Dank an euch beide erstmal.
Allerdings ist ja das Problem auch, dass es Vokabeln gibt, die im deutschen mehrere Bedeutungen haben. Also beispielsweise: Oikos = Haus, Hütte...
Das gleiche gibt es auch für griechische Vokabeln, also: Haus = Spiti, Oikos, Katoika
Jedes dieser Wörter soll in eine neue Zeile gespeichert werden. Das heißt, dass nur die Vokabeln nicht eingetragen werden sollen, die sowohl im griechischen als auch im deutschen schon in der Datenbank vorhanden sind. In der Datenbank steht z.B.: Haus = Spiti, dann soll Haus = Oikos trotzdem eingetragen werden, aber Haus = Spiti nicht!
Bei Fassy91´s Vorschlag wird nur kontrolliert, ob die deutsche Vokabel vorhanden ist, nicht aber ob die Kombination aus deutscher und griechischer Vokabel bereits existiert.
Das gleiche ist doch auch bei rabies Variante, oder?
PS: Wenn ich den Spalten unique mitgebe, dann heißt das doch, dass zweimal "Haus" nicht vorkommen kann, es gibt aber mehrere Übersetzungen für "Haus" und jede soll ja in einer neuen Zeile gespeichert werden.
Gruß,
Üsch
Allerdings ist ja das Problem auch, dass es Vokabeln gibt, die im deutschen mehrere Bedeutungen haben. Also beispielsweise: Oikos = Haus, Hütte...
Das gleiche gibt es auch für griechische Vokabeln, also: Haus = Spiti, Oikos, Katoika
Jedes dieser Wörter soll in eine neue Zeile gespeichert werden. Das heißt, dass nur die Vokabeln nicht eingetragen werden sollen, die sowohl im griechischen als auch im deutschen schon in der Datenbank vorhanden sind. In der Datenbank steht z.B.: Haus = Spiti, dann soll Haus = Oikos trotzdem eingetragen werden, aber Haus = Spiti nicht!
Bei Fassy91´s Vorschlag wird nur kontrolliert, ob die deutsche Vokabel vorhanden ist, nicht aber ob die Kombination aus deutscher und griechischer Vokabel bereits existiert.
Das gleiche ist doch auch bei rabies Variante, oder?
PS: Wenn ich den Spalten unique mitgebe, dann heißt das doch, dass zweimal "Haus" nicht vorkommen kann, es gibt aber mehrere Übersetzungen für "Haus" und jede soll ja in einer neuen Zeile gespeichert werden.
Gruß,
Üsch
Antwort 4 von Uesch
Oder ist das nicht bereits mit dem array_combine gelöst?
Antwort 5 von Uesch
Kann mir niemand helfen? Bräuchte das nämlich dringend!

