Tabellenvergleich in mysql

  • #1
C

cultsibi

Bekanntes Mitglied
Themenersteller
Dabei seit
19.03.2005
Beiträge
64
Reaktionspunkte
0
Guten Morgen

Habe ein sehr großes Problem bei einem Script das endlich mal fertig werden muss.

Jeden Tag erstelle ich eine neue Tabelle mit über 50.000 Einträgen in meine Datenbank. Diese Tabellen möchte ich tagtäglich vergleichen. Jeder Eintrag ist mit einer ID (primary key) bestückt, die sich niemals ändert. Außerdem befindet sich darin eine weitere Spalte mit einer Besitzer-ID. Diese 2. Besitzer-ID kann sich von Tag zu Tag ändern.

Und nun möchte ich jeden Tag überprüfen, wo es neue Besitzer gibt und wie viele es gibt. Das bedeutet ich muss jede ID des 1. Tag´s mit der gleichen ID des 2. Tag´s vegleichen und nachsehen, ob sich die Besitzer-ID verändert hat. Danach möchte ich das Ergebnis in einer neuen Tabelle ablegen oder zumindest erstmal ausgeben lassen.
Bisher habe ich erst eine ganz simples aber sehr Zeitaufwendiges Script versucht.

Code:
<?php
	echo <table>;
	$result = mysql_query(SELECT 
							ID, 
							owner 
						  FROM 
							tablle_tag1) 
	or die(mysql_error());
	while ($row = mysql_fetch_assoc($result))
	{
		$ID = $row['ID'];
		$owner = $row['owner']; 
		$result2 = mysql_query(SELECT
								 ID, 
								 owner
								FROM 
								 tablle_tag2 
								WHERE 
								 ID = $ID
								AND
								 owner != $owner) 
		or die(mysql_error());
		while ($row2 = mysql_fetch_assoc($result2))
		echo <tr><td>.$ID.</td><td>.$owner.</td><td>.$row2['owner'].</td></tr>;
	}
	echo </table>;
?>

Allerdings dauert dieses Script so lange, dass er für seine über 50.000 Einträge locker über eine Stunde bräuchte, was ich mir einfach nicht leisten kann...
Ich hätte gerne eine Lösung, mit der das Script < 1min zum Vergleichen braucht.
 
  • #2
Code:
<?php
$sql =->SELECT t1.ID, 
            t1.owner, 
            t2.ID, 
            t2.owner 
      FROM tabelle_tag_1 t1 
      LEFT JOIN tabelle_tag_2 t2 
      USING (ID) 
      WHERE t1.owner != t2.owner';
?>
 
  • #3
trotz eines LIMIT´s von 5000 dauert es so lange, dass das Script nicht fertig wird...

Woran kann das liegen?
 
  • #4
cultsibi schrieb:
trotz eines LIMIT´s von 5000 dauert es so lange, dass das Script nicht fertig wird...

Ähm, was du wolle ;D

Im ernst, was geht/nicht ???

zeig mal dein Script :)
 
  • #5
Code:
<?php
	error_reporting(E_ALL);
	
	include->config.php';
	
	echo <table>;
	$result = mysql_query('	SELECT t1.ID,
							  t1.tribe,
							  t2.ID,
							  t2.tribe
					   FROM Tabelle1 t1
					   LEFT JOIN Tabelle2 t2
					   USING (ID)
					   WHERE t1.tribe != t2.tribe
					   LIMIT 5000');
	while($row = mysql_fetch_assoc($result))
	echo <tr><td>.$ID.</td><td>.$tribe.</td><td>.$row2['tribe'].</td></tr>;
	echo </table>;							
?>
 
  • #6
?? $row2 ??

edit:

OK, ich hab das Szenario mal nachgebaut.

11.000 Einträge, jeder 50 ist verschieden (Sollte ungefähr so sein wie du es willst)
Überprüfung und schreiben der Tabelle < 2 sec. ;D ;D

ich hab allerdings >> $row = mysql_fetch_row($result) << verwendet ;)

Code:
<?php
echo <table>;
$result = mysql_query(' SELECT t1.ID,
                          t1.tribe,
                          t2.ID,
                          t2.tribe
                    FROM Tabelle1 t1
                    LEFT JOIN Tabelle2 t2
                    USING (ID)
                    WHERE t1.tribe != t2.tribe');
while($row = mysql_fetch_row($result)) {
	echo <tr><td>.$row[0].</td><td>.$row[1].</td><td>.$row[2].</td><td>.$row[3].</td></tr>;
}
echo </table>;
?>

BTW: die Abfrage WHERE t1.tribe = t2.tribe hat 3 sec. gedauert ;D
 
  • #7
:(

Code:
<?php
	error_reporting(E_ALL);
	
	include->config.php';

	echo <table>;
	$result = mysql_query(' SELECT t1.ID,
						  t1.tribe,
						  t2.ID,
						  t2.tribe
						  FROM ds1_village_201_05 t1
						  LEFT JOIN ds1_village_202_05 t2
						  USING (ID)
						  WHERE t1.tribe != t2.tribe');
	while($row = mysql_fetch_row($result)) {
		echo <tr><td>.$row[0].</td><td>.$row[1].</td><td>.$row[2].</td><td>.$row[3].</td></tr>;
	}
	echo </table>;
?>


Das Ding dauert bei mir total lange (diesmal ohne Limit bei 41.000 Einträgen)
Irgendwann nach 20min ist mir aufgefallen das es fertig war ;D
 
  • #8
Hi

Ich gehe davon aus dass die ID Spalten indexiert sind?
Die tribe Spalten sollten auch mit einem index versehen werden.

Gruß, Michael
 
  • #9
Sch****

Ich hatte keinen PRIMARY KEY vergeben
Jetzt geht das ganze auch innerhalb von 2-3 sec. (zumindest bei den ersten Versuchen)

Ich melde mich später nochmal...
 
Thema:

Tabellenvergleich in mysql

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben