Komplexe Datenbankabfrage

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

  • Komplexe Datenbankabfrage

    Hallo Leute,

    ich habe eine Frage, und zwar muss ich eine Datenbank sehr komplex abfragen.

    Die Tabellen ist wie folgt aufgebaut.....

    contactid | persönliche daten


    contacthistoryid | contacthistoryuser | contacthistorytype | contacthistorycontact

    Ich muss nun die Tabelle so abfragen, dass ich die contactids erhalte, die als contacthistorytype folgende enthalten, und zwar alle!!

    4,7,1

    Wie mache ich so eine Abfrage möglichst performant? (Es können nämlich noch viel mehr contacthistorytypes hinzukommen.

    Ciao und Danke
    Sunman

  • #2
    Aus deinem Posting ist zwar nicht ersichtlich, was für daten du speicherst und wie du sie verknüpst, aber kümmer dich um JOINs

    Kommentar


    • #3
      Hi Tobiaz,

      JOINS nutze ich bereits. Aber ich muss, um die Abfrage sauber hinzubekommen. Für jede ID ja einen JOIN machen.

      ...

      Oder nicht?

      Kommentar


      • #4
        Wie gesagt, wenn du nicht mit den angesprochenen Infos rausrückst, kann hier keiner was zu deinem Problem sagen.

        Woher soll man wissen, dass du schon nen JOIN benutzt?

        Kommentar


        • #5
          Kommt drauf an.

          Wenn du mit JOINs arbeitest, hast du ja sicherleich mehr als eine Tabelle?

          Wie sehen alle relevanten Tabellen aus (Felder)?
          Wie sieht deine Abfrage momentan aus?
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Hi TobiaZ,

            stimmt, die Infos hätte ich liefern können. -- Sorry hierfür.


            Ja das sind drei Tabellen:
            contact --- contactid | persönliche daten

            contactHistory --- contacthistoryid | contacthistoryuser | contacthistorytype | contacthistorycontact

            telephone --- die ist unwichtig!

            Hier eine Query:

            SELECT `contactID` FROM `b2b_contact`
            LEFT JOIN `b2b_telephone` tel ON ( tel.telephoneContact = contactID )LEFT JOIN `b2b_contactHistory` cT0 ON ( cT0.contactHistoryContact = contactID )
            LEFT JOIN `b2b_contactHistory` cT1 ON ( cT1.contactHistoryContact = contactID )
            LEFT JOIN `b2b_contactHistory` cT2 ON ( cT2.contactHistoryContact = contactID )
            LEFT JOIN `b2b_contactHistory` cT3 ON ( cT3.contactHistoryContact = contactID )
            LEFT JOIN `b2b_contactHistory` cT4 ON ( cT4.contactHistoryContact = contactID )
            LEFT JOIN `b2b_contactHistory` cT5 ON ( cT5.contactHistoryContact = contactID )
            LEFT JOIN `b2b_contactHistory` cT6 ON ( cT6.contactHistoryContact = contactID )
            LEFT JOIN `b2b_contactHistory` cT7 ON ( cT7.contactHistoryContact = contactID )
            LEFT JOIN `b2b_contactHistory` cT8 ON ( cT8.contactHistoryContact = contactID )
            LEFT JOIN `b2b_contactHistory` cT9 ON ( cT9.contactHistoryContact = contactID )
            LEFT JOIN `b2b_contactHistory` cT10 ON ( cT10.contactHistoryContact = contactID )
            WHERE
            ( cT0.contactHistoryType = '66'
            AND cT1.contactHistoryType = '69'
            AND cT2.contactHistoryType = '70'
            AND cT3.contactHistoryType = '71'
            AND cT4.contactHistoryType = '72'
            AND cT5.contactHistoryType = '73'
            AND cT6.contactHistoryType = '74'
            AND cT7.contactHistoryType = '75'
            AND cT8.contactHistoryType = '76'
            AND cT9.contactHistoryType = '77'
            AND cT10.contactHistoryType = '78' )
            GROUP BY `contactID`

            Kommentar


            • #7
              WOW, Schöne JOINS. Ich würde mal auf den ersten Blick sagen. Nicht Gut.

              Aber jetzt erzähl mir doch mal was zu den Daten.
              Was soll das ganze bewirken?

              Kommentar


              • #8
                Code:
                b2b_contactHistory.contactHistoryType IN ('66', '67', '68')
                So brauchst du die Tabelle nur einmal (gehört in den WHERE-Teil)

                Du bekommst dann alle, die mindestens einen der Typen besitzen, die du im WHERE abfragst.
                Wenn du jetzt die Einträge je ID zählst und nur die nimmst, wo du genau so viele Einträge findest, wie du im IN hast, sollte dein Problem gelöst sein
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Es geht darum, zu ermitteln, wieviele Kontakte best. Events hatten.
                  Wie kann ich am besten die Einträge pro ID zählen?

                  Ciao
                  Henning

                  Kommentar


                  • #10
                    Du willst also nur wissen, wie viele einträge in der contactHistory zu dem jeweiligen kontakt vorhanden sind. die verknüpfung ist contactHistoryContact = contactID.

                    na dann:

                    Code:
                    SELECT
                      COUNT() // informier dich drüber
                    FROM
                      contactHistory ch
                      LEFT JOIN contact c ON ( ch.contactHistoryContact = c.contactID )
                    WHERE
                      // hier dann happies bedingung

                    Kommentar

                    Lädt...
                    X