Supportnet Computer
Planet of Tech

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 :

<?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:


<?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

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!

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: