Abfrage über 4 Tabellen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abfrage über 4 Tabellen

    Folgendes Problem:

    Ich möchte aus sicht eines Tickets alle Verwalter angezeigt bekommen, die entweder Mitglied der ausgewählten Kategorie sind, oder schon dem Ticket zugeordnet sind.

    Die Tabellen sehen wie folgt aus:
    PHP-Code:
    mysqlDESCRIBE `tickets_kategorie`;
    +--------------+----------------------+------+-----+---------+-------+
    Field        Type                 Null Key | Default | Extra |
    +--------------+----------------------+------+-----+---------+-------+
    TICKET_ID    int(10unsigned     NO   PRI 0       |       |
    KATEGORIE_ID smallint(5unsigned NO   PRI 0       |       |
    ZUSTAND      enum('j','n')        | NO   |     | n       |       |
    +--------------+----------------------+------+-----+---------+-------+
    3 rows in set (0.01 sec)

    mysqlDESCRIBE `verwalter_kategorie`;
    +--------------+---------------------+------+-----+---------+-------+
    Field        Type                Null Key | Default | Extra |
    +--------------+---------------------+------+-----+---------+-------+
    VERWALTER_ID tinyint(4unsigned NO   PRI 0       |       |
    KATEGORIE_ID tinyint(4unsigned NO   PRI 0       |       |
    ZUSTAND      enum('j','n')       | NO   |     |         |       |
    +--------------+---------------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)

    mysqlDESCRIBE `tickets_bearbeiter`;
    +--------------+---------------------+------+-----+---------+-------+
    Field        Type                Null Key | Default | Extra |
    +--------------+---------------------+------+-----+---------+-------+
    TICKET_ID    int(10unsigned    NO   PRI |         |       |
    VERWALTER_ID tinyint(3unsigned NO   PRI |         |       |
    ZUSTAND      enum('j','n')       | NO   |     |         |       |
    +--------------+---------------------+------+-----+---------+-------+
    3 rows in set (0.01 sec
    Das ganze habe ich dann Versucht so Abzufragen:
    PHP-Code:
    $sql "SELECT `verwalter`.`VERWALTER_ID`, `verwalter`.`NAME`, `tickets_bearbeiter`.`ZUSTAND`
    FROM `verwalter` 
    INNER JOIN `verwalter_kategorie` ON `verwalter`.`VERWALTER_ID` = `verwalter_kategorie`.`VERWALTER_ID`
    INNER JOIN `tickets_kategorie` ON `tickets_kategorie`.`KATEGORIE_ID` = `verwalter_kategorie`.`KATEGORIE_ID`
    INNER JOIN `tickets_bearbeiter` ON `tickets_bearbeiter`.`VERWALTER_ID` = `verwalter`.`VERWALTER_ID`
    WHERE (`verwalter_kategorie`.`ZUSTAND` = 'j'
    AND `tickets_kategorie`.`TICKET_ID` = '"
    .$_GET['id']."'
    AND `tickets_kategorie`.`ZUSTAND` = 'j')
    OR (`tickets_bearbeiter`.`ZUSTAND` = 'j'
    AND `tickets_bearbeiter`.`TICKET_ID` = '"
    .$_GET['id']."')
    GROUP BY `verwalter`.`NAME`
    ORDER BY `verwalter`.`NAME` ASC" 
    Mein Problem ist, dass es so nicht ganz funktioniert. Denn ich bekomme ab und zu den falschen Zustand gelieft oder auch nicht den Kriterien entsprechende Verwalter. Ich denke ich weiss auch wieso: Denn wenn ich das GROUP BY Weg lasse, bekomme ich sehr oft einen/mehrere Verwalter 5-10 fach angezeigt, mit unterschiedlichen ZUSTAND.

    Ich habe es auch mal ohne JOINS Versucht, aber gleiches Problem, sobald ich noch den zweiten geklammerten Ausdruck dazunehme.

    PHP-Code:
    $sql "SELECT `verwalter`.`VERWALTER_ID`, `verwalter`.`NAME`
    FROM `verwalter`, `verwalter_kategorie`, `tickets_bearbeiter`, `tickets_kategorie`
    WHERE (`tickets_kategorie`.`TICKET_ID` = '"
    .$_GET['id']."'
    AND `tickets_kategorie`.`ZUSTAND` = 'j'
    AND `verwalter_kategorie`.`KATEGORIE_ID` = `tickets_kategorie`.`KATEGORIE_ID`
    AND `verwalter`.`VERWALTER_ID` = `verwalter_kategorie`.`VERWALTER_ID`
    AND `verwalter_kategorie`.`ZUSTAND` = 'j'
    OR (`tickets_bearbeiter`.`TICKET_ID` = '"
    .$_GET['id']."'
    AND `tickets_bearbeiter`.`ZUSTAND` = 'j'
    AND `verwalter`.`VERWALTER_ID` = `tickets_bearbeiter`.`VERWALTER_ID`)
    GROUP BY `verwalter`.`NAME`
    ORDER BY `verwalter`.`NAME` ASC" 
    Wäre super wenn jemand eine Idee hätte, denn ich stecke da im moment voll fest.

    Ich habe auch nochmal eine Bild mit den Tabellen-Verknüpfungen angehängt, damit es etwas übersichtlicher ist.

    Gruß,
    Thomas
    Angehängte Dateien
    Zuletzt geändert von aLiEnTxC; 26.02.2007, 15:37.

  • #2
    Re: Abfrage über 4 Tabellen

    Original geschrieben von aLiEnTxC
    Denn wenn ich das GROUP BY Weg lasse, bekomme ich sehr oft einen/mehrere Verwalter 5-10 fach angezeigt, mit unterschiedlichen ZUSTAND.
    Aber das ist doch nicht richtig, oder?
    Könnte es sein, dass deine Verwalter-Tabelle dann einfach falsche Einträge sammelt?

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Re: Re: Abfrage über 4 Tabellen

      Original geschrieben von ghostgambler
      Aber das ist doch nicht richtig, oder?
      Könnte es sein, dass deine Verwalter-Tabelle dann einfach falsche Einträge sammelt?
      Definiere mal bitte "falsche Einträge".

      In der Verwalter-Tabelle sind die "Benutzer" jeweils nur einmal aufgeführt.

      Die Verknüpfungtabellen können auch keine falschen Einträge enthalten, da wie man auf auf der DESCRIBE - Ausgabe sieht, alle ID-Fehler als Primärschlüssel definiert sind. Es kann höchstens sein, dass in der Verknüfungstabelle für die Ticket-Kategorie keine Daten (für das Ticket) stehen, die will ich aber in dem Fall dann sowieso nicht angeziegt bekommen.

      Kommentar


      • #4
        Mach mal bitte einen Test-Dump inklusive einem Beispielquery und dem Ergebnis was kommen sollte

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Ich glaube ich habe es doch mit der oben Beschreibenen Abfrage ohne JOIN hinbekommen... bin mir noch nicht ganz sicher, muss erst noch einige Tests machen.. Falls es doch nicht geht erstelle ich dann ein paar Beispiel Daten.

          Danke schonmal für die Bemühungen

          Gruß,
          Thomas

          Kommentar


          • #6
            Re: Abfrage über 4 Tabellen

            Original geschrieben von aLiEnTxC

            Ich habe es auch mal ohne JOINS Versucht,
            das ist nicht ohne JOIN, sondern den bösen CROSS JOIN, der Alptraum aller Abfrage.

            Kommentar

            Lädt...
            X