php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.03.2010, 10:50  
Neuer Benutzer
 
Registriert seit: 10.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
whisky befindet sich auf einem aufstrebenden Ast
Standard Zwei Tabellen vergleichen und Unterschiede ausgeben

Hallo liebe PHP-Mitstreiter,

ich bin mal als Neuling in dieses Forum eingestiegen, weil hier wohl sehr qualifiziert und hilfreich diskutiert wird. Und da steige ich doch glatt mal mit ein und hoffe auf eure Hilfe.

Ich habe bei Google so viele Millionen Ergebnisse zum Thema "Tabellen vergleichen" gefunden, aber die einfachste Lösung habe ich nicht gefunden. Vielleicht ist sie zu banal:

Ich habe zwei Tabellen. Tabelle 1 ist eine aktuelle Tabelle, Tabelle 2 ist eine gleich aufgebaute Tabelle, nur dass dort der Datenbestand einige Wochen älter ist. Einige Datensätze haben sich also geändert, ggf. sind sogar neue hinzugekommen.

Jetzt möchte ich alle Datensätze aus Tabelle 1 haben, die von denen in Tabelle 2 abweichen.

Könnt ihr mir da Tipps geben? Gibt es da Hausmittel von MySQL oder muss ich da selber mit einer Schleife ran? Es geht um MySQL 5.x.

Herzlichen Dank im Voraus und viele Grüße
Whiksy
whisky ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.03.2010, 11:45  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Code:
SELECT
  feld1, feld2
FROM
  tabelle1 t1
LEFT JOIN
  tabelle2 t2
ON
  t1.id = t2.id
WHERE
  t2.feld1 IS NULL
OR
  t1.feld1 <> t2.feld1
OR
  t1.feld1 <> t2.feld2
So in der Art sollte das gehen, musst halt die Tabellen und Felder noch anpassen.
draco88 ist offline   Mit Zitat antworten
Alt 10.03.2010, 11:53  
thomas_w
Gast
 
Beiträge: n/a
Standard

Willst Du nur die neuen Daten sehen, oder auch die alten Daten?
Folgende Abfragen liefern nur die neuen Datenzeilen.

Bei ORACLE geht dass so...

Code:
SELECT * from tabelle_neu 
MINUS
SELECT * from tabelle_alt
Bei MySQL eben etwas komplizierter z.B. so (oder siehe @draco88 )

Code:
SELECT col1, col2, col3
  FROM tabelle_neu
 WHERE (col1, col2, col3) NOT IN (SELECT col1, col2, col3 
                                    FROM tabelle_alt)
Ich habe beispielhaft drei Spalten (col1, col2, col3) angenommen.
Aber Vorsicht: Je nach Datenmenge kann so eine Abfrage echt ein "Server-Killer" sein.

Grüße
Thomas
  Mit Zitat antworten
Alt 10.03.2010, 12:21  
Neuer Benutzer
 
Registriert seit: 10.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
whisky befindet sich auf einem aufstrebenden Ast
Standard

Hallo zusammen und vielen Dank für eure Vorschläge.
Ich dachte immer, dass WHERE ... NOT IN ... nur einschlägig ist, wenn die Daten in der anderen Tabelle nicht bestehen. In meinem Fall bestehen ja 99% der Datensätze, nur dass sie ggf. abweichen. Fällt das dann auch unter "NOT IN"?

Die Lösung von Draco finde ich auch gut, vor allem, weil ich nicht zwingend alle Felder vergleichen muss. Denn das Feld "last_login" wird sich ja sicherlich häufig ändern, das ist aber für mich nicht wichtig.

Wegen der Perfomance habe ich mir noch keine Gedanken gemacht. Die Tabelle hat aber schon so um die 5000 Einträge und (wenn ich mich richtig erinnere) 2 MB Größe. Ich werde das mal in Kürze alles testen.

schon mal bis hierher vielen Dank
Whisky
whisky ist offline   Mit Zitat antworten
Alt 10.03.2010, 12:36  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.256
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Hast Du gemeinsame IDs? Sonst wird das nämlich sehr schwierig. Denn, je nachdem was „geändert“ bei Dir bedeutet, kann man dann nicht mehr zwischen einem neuen und einem geänderten Datensatz unterscheiden.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 10.03.2010, 12:59  
Neuer Benutzer
 
Registriert seit: 10.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
whisky befindet sich auf einem aufstrebenden Ast
Standard

Was darf ich unter gemeinsamen IDs verstehen? Gleiche ID für "gleichen" Datensatz? Ja, hab ich

Herr Müller hat also in der neuen und in der alten Tabelle die gleiche ID, sofern er nicht neu hinzugekommen ist.
Ich könnte also auch die neue Tabelle nehmen und per Schleife einfach die Datensätze durchlaufen lassen. Ich brauche dann ja nur in der "alten" Tabelle den jeweiligen Datensatz über die ID zu ermitteln und (z.B. per Feld-Vergleich) prüfen, ob Änderungen vorliegen.
Das wäre dann meine ursprünglich geplante PHP-Lösung. Und auf der Suche war ich jetzt nach einer (vielleicht besseren) MySQL-Lösung.

Gruß
Whiksy
whisky ist offline   Mit Zitat antworten
Alt 10.03.2010, 13:36  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 3.891
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Mensch
Standard

Bei ID Gleichheit ist das mehr oder weniger simpel, da zählt nur die Frage: Welcher Datensatz ist neuer?

Für einen "echten" Adressenabgleich/Doublettenfinder gibt es fertige (und teuere) Software - das Thema ist nicht trivial und erfordert eigentlich immer noch manuelle Entscheidungshilfen...
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 10.03.2010, 13:42  
Neuer Benutzer
 
Registriert seit: 10.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
whisky befindet sich auf einem aufstrebenden Ast
Standard

Nein, ein Douplettenfinder muss nicht sein. Es geht wirklich nur im die Frage

Besteht zwischen dem Datensatz aus der Tabelle X ein Unterschied zu dem aus Tabelle Y? Wenn ja, dann zeige mir den Datensatz aus Tabelle X (den Unterschied o.ä. brauch ich gar nicht zu sehen). Ist kein Unterschied da, dann vergiss es einfach und gehe zum nächsten Datensatz.

Ich glaube fast, die Schleife wäre die einfachste Lösung, oder?
GRuß
Whisky
whisky ist offline   Mit Zitat antworten
Alt 10.03.2010, 15:34  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Genau das macht mein Query, gibt alle Datensätze aus Tabelle 1 aus, die in Tabelle 2 nicht existiert oder anders ist.

Bei 5000 Datensätzen sollte das auch noch recht flott gehen.
draco88 ist offline   Mit Zitat antworten
Alt 11.03.2010, 01:23  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.256
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Wenn Tabelle 1 aktuell ist, brauchst Du doch nur die Tabelle 2 hinzufügen. Mit einer uniqe ID und INSERT IGNORE schliesst Du die alten gleichen IDs aus. Und für die Zukunft fügst Du am besten gleich ein Timestamp mit hinzu. Der aktualisiert sich dann selbst.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ausgeben von mehreren tabellen mysql SpecialFighter PHP Tipps 2009 9 15.10.2009 18:41
Datenbankabfrage von 2 tabellen mit php ausgeben scorpio111 Datenbanken 8 23.05.2009 10:47
2 werte aus Tabellen vergleichen und einen 3. ausgeben LB1981 PHP Tipps 2009 6 12.02.2009 00:25
2 Tabellen vergleichen und Rest ausgeben Seabear Datenbanken 2 12.03.2008 05:54
Zwei Texte vergleichen und Unterschiede mit Farbe kennzeich. BartTheDevil89 PHP Tipps 2008 5 02.01.2008 19:18
Tabellen ausgeben spacedone PHP Tipps 2008 10 28.08.2007 15:32
2 Tabellen vergleichen M3g4Star Datenbanken 3 17.11.2006 20:10
6 Tabellen -> Übereinstimmungen ausgeben lassen? becks123 PHP-Fortgeschrittene 3 23.12.2005 08:57
Nicht alles aus 2 Tabellen ausgeben Datenbanken 3 26.08.2005 14:09
mehrere tabellen aus einer db ausgeben lassen möchtegernchegga PHP Tipps 2005-2 6 21.07.2005 20:29
Problem 1 - Ergebnis aus drei Tabellen ausgeben Datenbanken 4 15.07.2005 14:53
Zwei Tabellen vergleichen Datenbanken 9 07.07.2005 14:34
eine spalte von 2 tabellen vergleichen Sclot PHP Tipps 2005 2 22.03.2005 19:00
2 Arrays vergleichen und unterschiede auslesen PHP Tipps 2005 6 25.02.2005 09:34
[Erledigt] tabellen verknuepfen und ergebnisse ueber link ausgeben PHP Tipps 2004 3 21.09.2004 06:04

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
oracle tabellen vergleichen, sql tabellen vergleichen unterschiede, sql tabellen vergleichen, http://www.php.de/datenbanken/65528-zwei-tabellen-vergleichen-und-unterschiede-ausgeben.html, oracle zwei tabellen vergleichen, oracle sql tabellen vergleichen, oracle 2 tabellen vergleichen, mysql 2 tabellen vergleichen, mysql zwei tabellen vergleichen, tabellen vergleichen oracle, sql zwei tabellen vergleichen, whisky tabelle, php tabellen vergleichen, sql 2 tabellen vergleichen, php zwei tabellen vergleichen, oracle datensätze vergleichen, oracle tabelle vergleichen, tabellen vergleichen, oracle tabelleninhalte vergleichen, zwei tabellen vergleichen php

Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum