online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Uesch vom 27.02.2020, 19:01 Options

Nicht existierende Einträge hinzufügen

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

$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]."')");
}


Oder wie würdet ihr das machen?



Gruß,

Üsch


Antwort schreiben

Antwort 1 von Fassy91 vom 27.02.2020, 21:36 Options

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 vom 28.02.2020, 12:30 Options

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 vom 28.02.2020, 13:30 Options

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 vom 28.02.2020, 13:31 Options

Oder ist das nicht bereits mit dem array_combine gelöst?

Antwort 5 von Uesch vom 29.02.2020, 23:08 Options

Kann mir niemand helfen? Bräuchte das nämlich dringend!

Ähnliche Themen

Ungenutzte Einträge unter MSCONFIG_SYSTEMSTART
barisal  08.02.2007 - 349 Hits - 3 Antworten

XP Reparatur unmöglich
Frau_Elster  22.01.2008 - 98 Hits - 11 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026