kleinerheiner: mysql: differenzmenge aus zwei tabellen

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

  1. 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

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
    1. 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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. so ähnlich gehts:

    select tab1.id from tab1 left join tab2 using(id) where tab2.id is null