• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Datensatz in die DB schreiben (schleife)

escape

New member
Hi ich habe das prob das ich zwei tabellen habe di identisch sind. Ich möchte aus der einen tabelle alle Zeilen ind die andere Tabelle schreiben. Weiss aber nicht wie ich das realiseren soll.

Bei mir schaut es derzeit so aus (falsch)


Hier sind alle Datensätze drin (vollständig)
Code:
    $sql= "
				SELECT 
					*
				FROM 
					test_update
				WHERE
					omni0
			";
			
			$check = array();
			$result = $db->query($sql); 
			while($row = mysql_fetch_assoc($result))
			{
			$check[] = $row;
			}
			$my = mysql_query($sql);
			$result = $db->query($sql);

Hier sollen die Daten nun reingeschrieben werden.
Omni ist in dieser Tabelle schon vordefeniert und identisch in beiden tabellen.
Code:
		$sql="
	        INSERT INTO
					test
			SET
				    username = '$check[username]',
				    basename = '$check[2]',
				    clan = '$check[3]',
				    rank = '$check[4]'
			WHERE
					omni0 = '$check1[0]'
		";
		$result = $db->query($sql);

Habe es nun so aber das funtzt net.
Code:
<?php
session_start();
require ('../../lib/global/url_vars.inc.php'); 
require (root.'lib/global/configure.inc.php');
require (root.'lib/modul/modul.php');
 
 
    $sql= "
				SELECT 
					*
				FROM 
					test_update
				WHERE
					omni0
			";
			
			$check = array();
			$result = $db->query($sql); 
			while($row = mysql_fetch_assoc($result))
			{
			$check[] = $row;
			}
			$my = mysql_query($sql);
			$result = $db->query($sql);
		



		$sql="
	        INSERT INTO
					test
			SET
				    username = '$check[username]',
				    basename = '$check[2]',
				    clan = '$check[3]',
				    rank = '$check[4]'
			WHERE
					omni0 = '$check1[0]'
		";
		$result = $db->query($sql);

?>

Ich habe langsam keine Ahnung mehr wie ich das machen soll.

Wäre für HILFE sehr sehr sehr dankbar.

Gruß Thomas
 
Zuletzt bearbeitet:
Das ist doch eine einmalige Sache oder?

Hast du Zugriff auf phpmyadmin? Da kannst du die Tabelle einfach kopieren.
Wenn nicht kannst du eine einfache FOR-Schlaufe verwenden und dann Eintrag für Eintrag in die Tabelle übertragen.
PHP:
for ($x=0;$x<count($check);$x++) {
  /**
  INSERT ANWEISUNG
  */
}
 
Ich bastel hier wie ein Großer und google mir nen Bären.
Habe hier #php/QuakeNet Tutorial - Schleifen nen Tutorial gefunden für forschleifen aber kapiere es nicht wie ich meine Abfrage/Insert da rein bekomme.

TEST1
Das sieht so aus:
ID - omni0 - omni1 - omni2 - omni3 -username - basename - clan - rank
(1, '0:1:1', '0', '1', '1', 'a', 'a', 'a', 'a', 'A'),
(2, '0:1:2', '0', '1', '2', 'a', 'a', 'a', 'a', 'A'),
(3, '0:1:3', '0', '1', '3', 'a', 'a', 'a', 'a', 'A'),
... 49500 Einträge insgesammt, alle haben eine unterschiedliche OMNI wie Ihr sehr sind der Rest der Spalten leer/Platzhalter


TEST2
Das sieht so aus:
ID - omni0 -username - basename - clan - rank
(1, '0:1:1', 'Icecold', 'Monheim', '-', 'Warrant-Officer'),
(2, '0:12:1', 'The_Odo666', 'Terra', '[Asgard]', 'Warrant-Officer'),
(3, '0:24:2', 'Cyborg Armee', 'Deutschland', '[Evolution]', 'General'),
... 3500 Einträge insgesammt, alle haben eine unterschiedliche OMNI wie Ihr seht beinhalten die Spalten Daten

Die Test2 Daten müssen in die Test1 man beachte aber das die ID keineswegs identisch sind! Sondern nur die Omnis

Mein einzigster Ansatzpunkt ist die Omni, denn die ist in der TEST1 und in der TEST2

Ich muss aus TEST2 alle Datensätze selecten nach der Omni und per php/mysql in die TEST1 schreiben aber so das der Eintrag aus Test2 zu der Omni aus Test1 passt.

Das muss ich halt mit WHERE machen. Wie das gehen soll kann ich mir sehr gut vorstellen aber die Umsetzung klappt nicht.

Wäre nochmal für hilfe dankbar.
Gruß Thomas
 
Zuletzt bearbeitet:
Das ist doch eine einmalige Sache oder?
Hast du Zugriff auf phpmyadmin?

Das wäre in der Tat sinnvoller. Ansonsten ist eine SQL-Query in einer Schleife nen Zeichen für schlechten Programmierstil. Du mußt jedes mal eine Anfrage an die Datenbank schicken, die muss für jedes Einfügen die Indexe etc aktualisieren. Besser ist es innerhalb der Schleife eine große Anfrage zusammen zu bauen und diese dann einmal danach abzusetzen.

Deine SQL Anfrage muss dann etwa so aussehen:
Code:
INSERT INTO table (col1, col2, col3...) VALUES 
(value1-1, value1-2, value1-3...),
(value2-1, value2-2, value2-3...),


bißchen Beispielcode (ungetestet)
PHP:
$sql= "SELECT * FROM  table1";
$result = $db->query($sql); 
$data = array();
while($row = mysql_fetch_assoc($result))
{
	$data[] = '('.$row[0].', '.$row[1].', '.$row[2].')'; // entsprechend fortsetzen
}
$sql = 'INSERT INTO `table2` (`spalte1`, `spalte2`, `spalte3`) VALUES '.implode(',', $data);
$db->query($sql);
 
Nein die Daten werden sich ständig ändern. Neue kommen dazu und Alte fallen weg. Es ist ein Onlinegame und die Daten müssen täglich auf dem neusten Stand sein.
 
Das leuchtet mir auch nicht ein. Warum 2 gleiche Tabellen? Da kannst du doch eigentlich eine sparen. Oder wenn sie schon doppelt sein muss, die Tabelle zur gleichen Zeit befüllen.
 
Zurück
Oben