Frank: MySQL - Problem: Doppelte Einträge

nAbend,

ich hoffe Ihr könnt mir helfen - mein Kopg qualmt schon...
folgendes Problem:
MySQL-Tabelle in der Form:
firma|abteilung|zweigstelle
koch|funk|bonn
koch|funk|köln
koch|TV|bonn
müller|funk|wien
müller|med|moskau
müller|lan|wien
schneider|PC|bonn
schneider|PC|Ulm
schneider|PC|Rom

das ganze soll nach Abfrage so aussehen

firma
-abteilung
--zweigstelle

also so:

koch
-funk
--bonn
--köln

müller
-funk
--wien
-med
--moskau
-lan
--wien

schneider
-PC
--Bonn
--Ulm
--Rom

Ich hoffe Ihr versteht was ich meine - aber wie soll ich das hinkreigen??

Tausend Dank - Frank

  1. Tag,

    die kurze oder die lange Version?
    Die Kurze:
    Nun ja, bei der Datenstruktur, über einen Trick. Frag die Daten sortiert nach firma, abteilung, zweigstelle ab und halte die halt zwei Vergleichsvariablen. Dort rein speicherst du dir beim Durchgehen der Datensätze die aktuelle Firma und weißt, so lange wie diese bleibt bist du nur im Bereich von Abteilungen. Das selbe dann auch für die Zweigstellen.

    Die Lange - und eigentlich wünschenswerte:
    Du machst ein Redesign deiner Datenbank, in Richtung von
    1. Firmen
    2. Abteilungen
    3. Zweigstellen
    (also 3 Tabellen, dann speicherst du auch bei einer Abteilung nicht 100x den Namen, nur weil es 100 Zweigstellen gibt...)
    und verküpfst dann entsprechend die Einträge.

  2. der theoretische background zu dem schon gemachten vorschlag läßt sich hier finden:

    http://www.google.de/search?q=normalisierung+%2Btabellen+%2Bdatenbank*&ie=UTF-8&oe=UTF-8&hl=de&meta=

    in deiner db hat nämlich der größte feind eines jeden db-designers - DIE REDUNDANZ - noch eine sehr starke präsenz ;-)

    viel erfolg!

  3. Hallo Matthias, hallo Rouven,

    danke für Eure Antworten...

    Das Problem ist einfach, dass ich die DB nicht entworfen habe, aber den ganzen Mist (!!!) ausbaden muss, d.h. die o.g. Abfrage.

    Ein Umstellen der DB ist nicht möglich, da darauf eine ganze Userverwaltung (etc.) beruht.

    Ich dachte nur jemand hat hier für mich eine Lösung - ich werd noch wahnsinnig.

    Hab versucht Eure Vorschläge zu realisieren, kriegs aber eibnfach nicht hin :-))))

    Vielen Dank, Frank

    1. Hallo Frank!

      Natürlich wäre eine Datenbankumstrukturierung sinnvoll - da dies aber nicht möglich ist, hab ich in der schnelle eine (nicht besonders empfehlenswerte, aber funktionierende) Routine geschrieben. Anpassungen sind vielleicht notwendig - grundsätzlich sollts aber hinhauen, da ich ähnlich verschachtelte Selects auch schon mal nutzen musste:

      ... connect database ...

      $firma = mysql_query("select distinct firma from tabelle order by firma where id = $default_organisation")
          or die ("Firmenabfrage fehlgeschlagen ...<br><br>");

      while($row1 = mysql_fetch_object($firma))
       {
        print($row1->firma . '<br>' . "\n");

      $abteilung = mysql_query("select distinct abteilung from tabelle where firma = " . $row1->firma . " order by abteilung")
              or die ("Abteilungsabfrage fehlgeschlagen ...<br><br>");

      while($row2 = mysql_fetch_object($abteilung))
        {
         print('-' . $row2->abteilung . '<br>' . "\n");

      $zweigstelle = mysql_query("select distinct zweigstelle from tabelle where firma = " . $row1->firma . " and abteilung = " . $row2->abteilung . " order by zweigstelle")
                 or die ("Zweigstellenabfrage fehlgeschlagen ...<br><br>");

      while($row3 = mysql_fetch_object($abteilung))
         {
          print('--' . $row3->zweigstelle . '<br>' . "\n");
         }
        }
       }

      Hoffe, Du kannst damit was anfangen,

      mfg

      norbert :=-)

      1. Hoppla!

        Die erste Abfrage muss natürlich so lauten:

        $firma = mysql_query("select distinct firma from tabelle order by firma")

        mfg

        norbert =:-)