Tabellenvergleich in mysql

Dieses Thema Tabellenvergleich in mysql im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von cultsibi, 15. Juli 2005.

Thema: Tabellenvergleich in mysql Guten Morgen Habe ein sehr großes Problem bei einem Script das endlich mal fertig werden muss. Jeden Tag erstelle...

  1. 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. Ä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...
     
Die Seite wird geladen...

Tabellenvergleich in mysql - Ähnliche Themen

Forum Datum
Versionsprobleme mit der "mysql.dll" (32 und 64bit) Windows 7 Forum 28. Juni 2016
Mysql-Zugriff via batch Webentwicklung, Hosting & Programmierung 16. Okt. 2014
Automatisierte MySQL Backups erstellen Windows XP Forum 28. Aug. 2012
iis7 verträgt sich nicht mit mysql Windows XP Forum 2. Aug. 2012
Programmierer (PHP/MySQL) für WinTotal gesucht! Windows XP Forum 20. Mai 2012