[MySQL 4.1] JOIN mit 3 Tabellen

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

  • [MySQL 4.1] JOIN mit 3 Tabellen

    Hallo zusammen,

    Ich habe ein Script in dem ich verschiedenste Tabellen mit while-Schleifen abfrage.
    Also z.B. "Select knr from blabla"
    Das Ergebnis habe ich dann in verschiedenen While Schleifen durch erneute Querys abgefragt.
    Hat bisher geklappt, nur ich muss feststellen das es mit der Zeit etwas langsam geworden ist. Das sollte ich mal ändern

    Nun habe ich das ganze mal mit JOINs versucht. Problem ist hier das das Script nun knapp 30 Sekunden benötigt. Ich bekomms nicht so ganz hin.
    PHP-Code:
    $sql  "SELECT kundenlogin.knr, kundenlogin.antrag, kundenlogin.benutzername, kundenlogin.password, kundenlogin.kategorie, kundenlogin.aktiv ";
    $sql .= "FROM `kundenlogin` ";
    $sql .= "LEFT join `tabelle1` ON tabelle1.knr = kundenlogin.knr ";
    $sql .= "LEFT join `tabelle2` ON tabelle2.knr = kundenlogin.knr ";
    $sql .= "WHERE `kundenlogin`.`knr` > 1000"
    Die Tabelle 'Kundenlogin' hat jeweils eine unique KNR.

    Diese 'KNR' (kann) in Tabelle1 ODER Tabelle2 gefunden werden.
    Sind nur knapp 400 KNR in ca. 30.000 Datensätzen. Also nix besonders aufregendes.

    Die Abfrage kann man doch sicherlich etwas verbessern, oder ??

    Cu Susi
    Zuletzt geändert von SusiSorglos; 09.03.2009, 00:55.
    PHP 8.0, MariaDB 10.5 auf U20.04

  • #2
    Gut Entscheidung mit dem Join

    Du wählst aber nur Attribute aus der Relation "kundenlogin" aus. Wozu machst du denn den Join überhaupt, wenn du garkeine Daten daraus haben willst? Liegt "knr" bei allen Tabellen auf dem Index?
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

    Kommentar


    • #3
      Die Abfrage darfst Du nicht so ganz erst nehmen. Es geht mir ja erstmal nur um einen korrekten JOIN. Erstmal zählt das das läuft.

      Im Kundelogin wird eine KNR durch AI generiert. Jenachdem was der Kunde macht, wird er in Tabelle1 oder Tabelle2 eingetragen.

      Diese KNR wird aber jeweils nur 1 x in der jeweiligen Tabelle gefunden werden können (also unique). Den unterschuied zwischen Primärschlüssel, index und unique habe ich noch nicht so ganz verstanden. Aber ich bin bisher auch ganz gut ohne das Verständnis ausgekommen
      PHP 8.0, MariaDB 10.5 auf U20.04

      Kommentar


      • #4
        Ich darf den nich so ernst nehmen?

        Also sorry, aber... dann zeig doch mal bitte ein konkretes Problem. Wenn dein Query 30 Sekunden dauert, du aber einen anderen Postest, können wir den der so lange dauert auch nicht gemeinsam optimieren, da ihn ja keiner Kennt.

        Sind die Attribute "KNR" denn jeweils auf UNIQUE gesetzt? Das wäre ja ein Index. An deiner Stelle würd ich mich bzgl. Primary Key, Index und Unique auch mal schlau machen, das ist nämlich echt nützlich wenn man weiß wofür was gut ist.
        Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

        Kommentar


        • #5
          $sql .= "WHERE `kundenlogin`.`knr` > 1000";
          ... muss das so sein? Oder so ...

          $sql .= "WHERE `kundenlogin.knr` > 1000";
          Gruß php_fussel

          Kommentar


          • #6
            Nein, Ihre Schreibweise ist richtig. Bei deiner kommt sogar n Fehler weils das Attribut nicht gibt.
            Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

            Kommentar


            • #7
              Das ist wirklich schon der ganze Query.
              Natürlich möchte ich noch weitere Spalten abfragen, nur das ist ja nicht das Problem.

              Jetzt habe ich die Spalten KNR der Tabelle1 und Tabelle2 auf Primärschlüssel gesetzt... Und PMA sagt mir nun statt 26 Sekunden irgendwas von 0.003 Sekunden. Ich glaub das hat was gebracht.


              Jetzt stricke ich mein ganzes Script um und bekomme jetzt die Probleme das ich für Tabelle1 und Tabelle2 die ausgelesenen Spalten mit einem AS versehen muss weil sie ja sonzt doppelt wären. Vielleicht geht es auch wieder anders. Aber ich bin jetzt erstmal damit zufrieden

              @fussel
              [klugscheiss]
              'bla.blub' wäre EINE Spalte. Spalten dürfen aber meines Wissens keine Punkte enthalten. Da ein PUNKT die Spalte von der Tabelle trennt. Deshalb darf der Punkt nich mit in den Anführungszeichen stehen.
              [/klugscheiss]
              PHP 8.0, MariaDB 10.5 auf U20.04

              Kommentar


              • #8
                Original geschrieben von SusiSorglos
                Jetzt habe ich die Spalten KNR der Tabelle1 und Tabelle2 auf Primärschlüssel gesetzt... Und PMA sagt mir nun statt 26 Sekunden irgendwas von 0.003 Sekunden. Ich glaub das hat was gebracht.
                Dann vermute ich mal, es stand vorher nicht auf UNIQUE, hätte nämlich so ziemlich den gleichen Effekt gebracht. Wie gesagt, mal über Indizes schlaumachen, ist echt nützlich!
                Original geschrieben von SusiSorglos
                'bla.blub' wäre EINE Spalte. Spalten dürfen aber meines Wissens keine Punkte enthalten. Da ein PUNKT die Spalte von der Tabelle trennt. Deshalb darf der Punkt nich mit in den Anführungszeichen stehen.
                Ack.
                Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

                Kommentar

                Lädt...
                X