mysql: differenzmenge aus zwei tabellen
kleinerheiner
- datenbank
0 Andavos0 Tom
0 kleinerheiner
guten abend,
ich bin gaaaaanz kurz vorm durchdrehn! hab folgendes prob:
zwei tabellen, jede hat eine spalte mit einem unique index
tab1
id
1
2
3
4
tab2
id
2
3
wie kriege ich die differenz beider tabellen? also:
id
1
4
hab die mysql 4.1.1a drauf und folgende abfrage getestet:
select tab1.id from tab1 where tab1.id not in (select id from tab2)
das funktioniert auch wunderbar, bis zum eintrag 12545, dran bricht die ausgabe ab, obwohl noch einige tausend rows kommen müssten.
hat jemand eine idee, was da mit der 4.1.1 los ist? oder wie man das prob anders lösen könnte?
gruß
heiner
Hallo,
hier mal der grundsatz:
1. Man braucht 2 leere Arrays.
Dann machst du 2 While-Datenbank abfragen.
Bei jedem durchlauf, fügst du die ID in das jeweilige Array ein.
also so
$array1 = array();
$array2 = array();
while($row1 = ...)
{
//id in $array1 einfügen per array_push()
}
while($row2 = ...)
{
//id in $array2 einfügen per array_push()
}
Als nächstes gehst du gibst du mit einer While-Schleife oder foreach die Werte vom array1 "aus".
In der Schleife überprüfst du mit if ob es den Wert gibt
ca. so
$a = 0;
while($a < count($array1)
{
if(in_array($array2, $array1[$a]))
{
//Nichts passiert
}
else
{
echo "Diese ID gibt es in Tabelle 2 nicht: $array1[$a]";
}
$a++;
}
dieses "$array1[$a]" sollte man evt. in ein 3. leeres Array "push"
P.S. Die Befehle habe ich nur so hingeschrieben, aber die sollten ca. so stimmen
MFG
Andavos
Hello Andavos,
MySQL ist zwar noch lange nicht so leistungsfähig, wie z.B. eine Informix-Datenbank. Aber deshalb muss man Datenbankaufgaben trotzdem nicht in der API lösen. Die Relationen kann MySQL viel schneller, als eine Interpreter-Script-Sprache. :-)
Liebe Grüße aus http://www.braunschweig.de
Tom
so ähnlich gehts:
select tab1.id from tab1 left join tab2 using(id) where tab2.id is null