Ankündigung

Einklappen
Keine Ankündigung bisher.

Summe aus verknüpften (INNER JOIN) Tabellen bilden

Einklappen

Neue Werbung 2019

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

  • Summe aus verknüpften (INNER JOIN) Tabellen bilden

    Hallo Gemeinde,

    es ist wieder mal soweit, ich brauche Eure Hilfe.
    Zum Problem:
    Ich habe 2 Tabellen die ich per "INNER JOIN" verknüpft habe. Aus einer Tabelle kommen die relevanten Daten, aus der anderen die dazugehörigen Preise.
    Das sieht so aus:
    PHP-Code:
    $dbh = new PDO("mysql:host=$hostname;dbname=$db"$username$password);
    foreach(
    $dbh->query('SELECT qi_domains.mo,qi_domains.tld,qi_domains.aktiv,netto
    FROM qi_domains
    INNER JOIN qi_domainpreise
    ON qi_domains.tld=qi_domainpreise.endung
    WHERE qi_domains.kdnr="1234"'
    ) as $row) {
    echo 
    "<tr>";
    echo 
    "<td>" $row['mo'] . "</td>";
    echo 
    "<td>" $row['tld'] . "</td>";
    echo 
    "<td>" $row['aktiv'] . "</td>";
    echo 
    "<td>" $row['netto'] . "</td>"
    echo 
    "</tr>";

    Funktioniert auch wunderbar, es wird die Tabelle ausgegeben in der 4. Spalte stehen die (Netto)Preise.
    Nun möchte ich aus eben diesen Preisen eine Summe bilden.
    Natürlich kann ich mit einem weiteren Query die Preise aus der DB per "SUM" addieren und darstellen, aber es sollen ja nur die Preise aus der vorangegangenen WHERE-Definition addiert werden und nicht die gesamte Tabelle.
    Mit
    PHP-Code:
    $a = array($row['netto']);
    echo 
    "" array_sum($a) . ""
    komme ich nicht weiter, hier wird mir als "Summe" nur der erste Wert aus der Tabelle ausgegeben...!?

    Wie kriege ich das am Besten hin? Wer hat mir die Lösung?

    Danke schon mal!


  • #2
    Mach dir über deine Schleife eine Variable und dann:

    PHP-Code:
    $summe 0;

    for () {
    $summe += $row['netto'];
    }

    echo 
    $summe

    Kommentar


    • #3
      Hm, danke, aber wenn ich das so einfüge, dann crasht die ganze Seite... (500 Error)

      Kommentar


      • #4
        Du musst das natürlich an deinen Code anpassen. Das ist nur Phantasie Code um zu zeigen, wie es geht.

        Kommentar


        • #5
          Schon, aber da gibt es doch nichts anzupassen?
          Habe zwar ein paar Sachen probiert, aber der 500er bleibt...

          Kommentar


          • #6
            Zitat von kayleigh Beitrag anzeigen
            Schon, aber da gibt es doch nichts anzupassen?
            Habe zwar ein paar Sachen probiert, aber der 500er bleibt...
            Doch, da gibt es was anzupassen - der Code in #2 zeigt nur das Prinzip, ist aber kein lauffähiger Code! Wenn du deinen Code nicht zeigst und auch nicht die Fehlermeldung kann dir hier auch keine helfen. Und nein das "500er" ist nicht die Fehlermeldung, die steht im Errorlog (error_reporting/display_errors ist aktiviert?).

            Kommentar


            • #7
              Mehr Code als ich bereits gepostet hatte gibt es halt nicht...
              Hier nochmal in Gänze:
              PHP-Code:
              <!doctype html>
              <html lang="en">
              <head>
              <meta charset="utf-8">
              <meta name="viewport" content="width=device-width, initial-scale=1">
              <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
              </head>
              <body>
              <div class="container">
              <div class="row">
              <div class="col-md-12">
              <h2>&nbsp;</h2>
              <table class='table table-bordered'>
              <tr>
              <th>Monat</th><th>TLD</th><th>aktiv</th><th>Preis</th>
              </tr>
              <?php
              $hostname
              ="localhost";
              $username="xxxxxx";
              $password="xxxxxx";
              $db "xxxxxx";
              $dbh = new PDO("mysql:host=$hostname;dbname=$db"$username$password);
              foreach(
              $dbh->query('SELECT qi_domains.mo,qi_domains.tld,qi_domains.aktiv,netto
              FROM qi_domains
              INNER JOIN qi_domainpreise
              ON qi_domains.tld=qi_domainpreise.endung
              WHERE qi_domains.kdnr="4444"'
              ) as $row) {
              echo 
              "<tr>";
              echo 
              "<td>" $row['mo'] . "</td>";
              echo 
              "<td>" $row['tld'] . "</td>";
              echo 
              "<td>" $row['aktiv'] . "</td>";
              echo 
              "<td>" $row['netto'] . "</td>"
              echo 
              "</tr>";
              }

              echo 
              "<table class='table table-bordered'>";
              echo 
              "<tr>";
              echo 
              "<th colspan='4' style='text-align: right'>Preis gesamt</th>";
              echo 
              "</tr>";
              echo 
              "<tr colspan='4'>";
              echo 
              "<td style='text-align: right'>";
              $a = array($row['netto']);
              echo 
              "" array_sum($a) . "";
              echo 
              "</td>";
              echo 
              "</tr>";
              echo 
              "</table>";

              ?>
              </tbody></table>
              </div>
              </div>
              </div>
              </body>
              </html>

              Kommentar


              • #8
                Zitat von kayleigh Beitrag anzeigen
                Mehr Code als ich bereits gepostet hatte gibt es halt nicht...
                d.h. du hast den Hinweis aus #2 überhaupt nicht umgesetzt (wobei das for darin bei dir ein foreach ist) sondern wunderst dich einfach dass dein Code nicht funktioniert? Und Fehlermeldung hast du auch nicht gepostet …

                Hier nochmal in Gänze:
                du erzeugst invaliden Code, nach </tr> darf kein <table> kommen, außerdem ist deine array_sum-Konstruktion natürlich Unsinn: du bastelst in $a ein Array mit dem Wert der letzten Zeile und wunderst dich dass nicht die Summe aller Zeilen dabei rauskommt?

                Kommentar


                • #9
                  Was ich eben gepostet habe, das ist der "Ursprungscode".
                  Wenn ich den Schnipsel aus #2 einsetze, dann sieht der Part (1:1 übernommen) so aus:
                  PHP-Code:
                  echo "<table class='table table-bordered'>";
                  echo 
                  "<tr>";
                  echo 
                  "<th colspan='4' style='text-align: right'>Preis gesamt</th>";
                  echo 
                  "</tr>";
                  echo 
                  "<tr colspan='4'>";
                  echo 
                  "<td style='text-align: right'>";

                  $summe 0;
                  for () {
                  $summe += ($row['netto']);
                  }

                  echo 
                  $summe;
                  echo 
                  "</td>";
                  echo 
                  "</tr>";
                  echo 
                  "</table>"
                  Und dies wirft den Fehler:
                  Parse error: syntax error, unexpected ')', expecting ';' in ......... on line 46
                  Die Zeile 46 ist hierbei:
                  PHP-Code:
                  for () { 

                  Kommentar


                  • #10
                    Zitat von kayleigh Beitrag anzeigen
                    Was ich eben gepostet habe, das ist der "Ursprungscode".
                    Wenn ich den Schnipsel aus #2 einsetze, dann sieht der Part (1:1 übernommen) so aus:
                    Du hast bereits zweimal gesagt bekommen dass du den Pseudocode eben *nicht* einfach übernehmen kannst, einfach Code irgendwo kopieren und auf gut Glück irgendwo einfügen hat noch nie funktioniert. Tipp: das was im Pseudocode innerhalb von for steht gehört bei dir in deine foreach-Schleife, der Rest entsprechend davor/danach.

                    Kommentar


                    • #11
                      Danke, aber so komme ich nicht weiter, mit diesen Hinweisen kann ich einfach nicht umgehen.
                      Sei's drum, werde ich woanders fragen müssen.

                      Kommentar

                      Lädt...
                      X