Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] sql abfragen optimieren

Einklappen

Neue Werbung 2019

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

  • [Erledigt] sql abfragen optimieren

    hallo,

    ich habe 2 tabellen aus dehnen ich eine bestimmte zelle erhöhen muss.

    mein weg dahin klappt einwandfrei, aber ich wollte wissen ob man das ganze ein wenig schöner gestalten kann. Also in einer einzigen query.

    PHP-Code:
                $sql "SELECT 
                            id 
                        FROM 
                            users 
                        WHERE 
                            name 
                        LIKE 
                            '"
    .$_SESSION['username']."'";
                            
                
    $id $GLOBALS['DB']->query($sql);
                
                
    $sql "SELECT 
                            richtig 
                        FROM 
                            zehner 
                        JOIN 
                            users 
                        ON 
                            "
    .$id[0]['id'].
                        LIKE 
                            zehner.id"
    ;
                            
                
    $result $GLOBALS['DB']->query($sql);
                
                
    $totalresult $result[0]['richtig']+1;
                
                
    $sql "UPDATE 
                            zehner 
                        SET 
                            richtig = "
    .$totalresult.
                        WHERE 
                            id 
                        LIKE 
                            '"
    .$id[0]['id']."'";
                            
                
    $GLOBALS['DB']->query($sql); 

  • #2
    Bitte beschreibe erst mal dein Datenmodell, und was du mit diesen Queries machst.
    Einfach nur vollkommen unkommentierten Code ohne jede weitere Erklärung dessen hier abzuladen und dann nach einer „Verbesserung“ zu fragen, ist schon etwas dreist.

    Kommentar


    • #3
      Zitat von Mynoriem Beitrag anzeigen
      PHP-Code:
      SELECT 
                              richtig 
                          FROM 
                              zehner 
                          JOIN 
                              users 
                          ON 
                              
      ".$id[0]['id']." 
                          
      LIKE 
                              zehner
      .id 
      JOIN users ON 1 LIKE zehner.id
      und das erkennt MySql ohne probleme? hart

      Code:
      UPDATE 
        `zehner` 
      SET 
         `richtig` = `richtig` + 1
      WHERE
        `id` = ( SELECT `id` FROM `users` WHERE `name` = 'deine PHP Variable' )

      Kommentar


      • #4
        Zitat von phpler5541 Beitrag anzeigen
        SELECT
        richtig
        FROM
        zehner
        JOIN
        users
        ON
        ".$id[0]['id']."
        LIKE
        zehner.id
        und das erkennt MySql ohne probleme? hart
        ja erkennt er

        zu chrisB : sry

        also ich habe eine tabelle users in der halt der user steht mit eindeutiger id.
        des weiteren habe ich eine tabelle in der bei richtiger lösung einer aufgabe die zahl in spalte richtig um 1 erhöht werden soll bzw bei falscher antwort der wert der zelle falsch um eins erhöht.
        in der tabelle erkenne ich den user an der id die in dieser spalte ebenfalls vorhanden ist.

        Kommentar


        • #5
          Zitat von Mynoriem Beitrag anzeigen
          in der tabelle erkenne ich den user an der id die in dieser spalte ebenfalls vorhanden ist.
          Und warum hast du die User-ID, die doch ein absolut zentrales Identifikationsmerkmal darstellt, nicht auch gleich in der Session abgelegt, so dass du jederzeit Zugriff darauf hast, ohne sie erst noch mit einer extra Query oder Subquery ermitteln zu müssen?

          Dann reduziert sich das ganze nämlich, unter Einbeziehung von phpler5541s Vorschlag, auf
          Code:
          UPDATE 
            `zehner` 
          SET 
             `richtig` = `richtig` + 1
          WHERE
            `id` = /*User-ID aus der Session*/
          und für den falsch-Fall analog.

          Bzw. kannst du auch gleich den Spaltennamen 'richtig' oder 'falsch' vorher einer Variablen zuweisen, so dass du ihn dann nur noch in die Abfrage einsetzen musst - damit reduzieren sich die Stellen, an denen eine Abfrage erfolgt, dann auf genau diese eine.

          Kommentar


          • #6
            werde ich machen.

            thx euch zweien.

            also muss das noch mal aufmachen

            ich habe die änderungen vorgenommen und so sieht der code aus

            Code:
            		     	$sql = -"UPDATE 
            						zehner 
            					SET 
            						richtig = richtig + 1
            					WHERE
            						id = ".$_SESSION['userid']."";
            aber es geht nicht in sql geht der befehl wenn ich $xxx durch 1 ersetze.
            die variable habe ich auch ausgespuckt und sie ist richtig.

            Kommentar


            • #7
              Zitat von Mynoriem Beitrag anzeigen
              werde ich machen.

              thx euch zweien.

              also muss das noch mal aufmachen

              ich habe die änderungen vorgenommen und so sieht der code aus

              Code:
              		     	$sql = -"UPDATE 
              						zehner 
              					SET 
              						richtig = richtig + 1
              					WHERE
              						id = ".$_SESSION['userid']."";
              aber es geht nicht in sql geht der befehl wenn ich $xxx durch 1 ersetze.
              die variable habe ich auch ausgespuckt und sie ist richtig.
              hat sich erledigt!

              der gepostete code enthält sogar den fehler.

              $sql = -"UPDATE

              mit dem minuszeichen kann das nix geben

              Kommentar


              • #8
                Bitte versuch mal auf $GLOBALS zu verzichten. Es gibt immerhin Methodenparameter und aehnliches. Ausserdem ist es ein Irrglaube Sessiondaten nicht escapen zu muessen.

                Stell dir vor ich nenne mich:
                ' UNION ALL SELECT '%' --
                Dann ueberschreibe ich alle Eintraege deiner Zehner-Tabelle. Mal vorausgesetzt dein Query davor funktioniert ueberhaupt.

                Kommentar

                Lädt...
                X