PHP Script vs. MySQL-Abfrage

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

  • PHP Script vs. MySQL-Abfrage

    Hallo,

    ich habe folgendes Problem: Bitte schlagt mich jetzt nicht wenn das mit dem Vorherigen Thema "JOINS" zu lösen ist, ich hab den ganzen Beitrag durchgelesen und viel rumprobiert, es aber leider nicht auf die Reihe gebracht...
    Ich habe eine Kundendatenbank (MySQL 3.23.55), die vereinfacht aus zwei Tabellen besteht:
    1. Die Kundenstammdaten (z.B. Kundennummer, Rabattstufe, Login-Passwort etc.)
    2. Die Kundenkontaktdaten (z.B. Telefonnummern, Anschrift, etc.)
    Jeder Kunde hat einen Datensatz in 1. und zwei Datensätze in 2. Einen vom Typ (I)intern und einen vom Typ (E)xtern. Das hat den Hintergrund, dass der Kunde seine Daten Typ (E) selbst aktualisieren kann, bevor diese Änderung aber in den Firmeninternen Datensatz -Typ (I)- übernommen werden müssen die Änderungen manuell überprüft werden.
    Ich suche im Moment verzweifelt an einer SQL-Abfrage die mir alle die Datensätze Typ (E) liefert, zu denen noch kein Eintrag vom Typ (I) existiert. Hat jemand eine Idee, oder muss ich die Abfrage auf zwei kleinere Abfragen aufteilen und dann per PHP entsprechend auswerten. Letzteres erfordert allerdings relativ viel Ressourcen bei mehreren 1000 Kundendatensätzen.

    Vielen Dank schon für eure Mühe!
    tracer

  • #2
    das sollte per join gehen ... du kannst eine tabelle auch mehrmals "joinen".
    in deinem fall ist 'NULL' ein guter ansatz. schau dir das sticky hier im forum
    nochmal an und probiers im phpmyadmin aus
    Kissolino.com

    Kommentar


    • #3
      Hallo nochmal,
      vielen Dank für den Hinweis, jetzt habe ich eine Lösung gefunden:


      Code:
      SELECT 
        mdID 
      FROM contact_masterdata 
        INNER JOIN contact_addresses AS A1 
          ON (A1.addrRefID = mdID)
          AND (A1.addrType='E') 
        LEFT JOIN contact_addresses AS A2 
          ON (A2.addrRefID = mdID) 
          AND (A2.addrType='I') 
      WHERE A2.addrType IS NULL;
      Leider braucht die Abfrage bei ca. 750 Datensätzen (contact_masterdata) schon ca. 11 Sekunden, wie lange dauert das dann erst wohl bei 10.000 oder 20.000 Datensätzen. Sieht jemand einen Verbesserungsansatz?

      Danke nochmal!
      tracer

      Kommentar


      • #4
        Code:
        SELECT 
          a1.addrRefId 
        FROM contact_addresses a1
          LEFT JOIN contact_adresses a2
            ON a1.addRefId = a2.addrRefId
        WHERE
          a1.addrType = 'E'
          AND
          a2.addrType IS NULL
        liefert das nicht auch das gewünschte?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          abgesehen von happys vorschlag solltest du noch deine indices überprüfen.
          Kissolino.com

          Kommentar


          • #6
            In diesem Fall bekomme ich als Rückgabe Wert eine leere Tabelle. Das Problem ist auch noch, dass es neben den Adressen vom Typ (I)ntern und (E)xtern noch (S)hipping (abweichende Lieferadressen) und (O)rder (Sicherungskopie von Lieferadressen, falls der Kunde im Zeitraum zwischen Bestellung und Auslieferung an seinen Lieferadressen was ändert)

            tracer

            Kommentar


            • #7
              Tja,etwas peinlich, die Spalte addrRefID wurde nicht als Index angelegt, jetzt dauert das ganze noch schlappe 0,05 sec

              Vielen Dank nochmal, hänge jetzt an dem Problem schon länger, hab's schon in anderen Foren versucht, aber Tagelang nicht mal einen Hinweis bekommen, hier hat sich das ganze jetzt in etwa einer Stunde geklärt!

              Vielen Dank!
              tracer

              Kommentar


              • #8
                stimmen denn jetzt auch die daten?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Ja, die Daten stimmen! Jedenfalls soweit ich das bis jetzt überprüfen konnte.
                  Allerdings werde ich in einer ruhigen Minute nochmal versuchen deinen Vorschlag anzupassen, so dass er mit den restlichen Address-Typen funktioniet. Scheint die beste Lösung zu sein, da ich mir die contact_masterdata-Tabelle in der Abfrage völlig schenken kann

                  Kommentar

                  Lädt...
                  X