Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Array aus while-Schleife in andere while

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Array aus while-Schleife in andere while

    Moin,

    ich möchte Werte von zwei Arrays zusammenzählen, um einfach die Summe beider Werte auszugeben. Zum Hintergrund: 1 x Datenbank, 2 x Tabelle, der Aufbau beider Tabellen ist identisch, diese Werte möchte ich zusammenzählen.

    Zu meinem Code:
    PHP-Code:
    echo "Eingehende E-Mails Server1:";
        echo 
    '<br>';
        
    $incount_u mysql_query("SELECT * FROM server1 WHERE time >= '$idfeld_links' AND time <= '$idfeld_rechts'");  
        if(
    $incount_u === FALSE) {
        die(
    mysql_error()); 
    }
        
        echo 
    "<table width='100%' border='0'>";
        echo 
    "<tr bgcolor=#F5F2CD>";
        echo 
    "<th width='25%'>Tag</th>";
        echo 
    "<th width='25%'>Anzahl</th>";
        echo 
    "<th width='25%'>Anzahl verschlüsselt</th>";
        echo 
    "<th width='25%'>Prozent</th>";
        echo 
    "</tr>";
        
    $anzahl_in_server1 = array();
      while(
    $row=mysql_fetch_array($incount_u)){
        echo 
    "<tr align='center' bgcolor=#F5F2CD>";
        echo 
    "<td>",substr ($row['time'],0,10), "</td>";
        echo 
    "<td>"$row['incount'], "</td>";
        echo 
    "<td>"$row['incountssl'], "</td>";
        
    $prozentberechnen_in_server1 round(($row['incountssl']/$row['incount']*100), 1);
        echo 
    "<td>"$prozentberechnen_in_server1," %</td>";
        echo 
    "</tr>";
        
    array_push($anzahl_in_server1$row['incount']);
        }
        echo 
    "</table>"
    Die Ausgabe:


    Also das funktioniert wunderbar. Nun habe ich noch eine zweite Tabelle von "Server2" und diese möchte ich nicht beide einzeln hintereinander ausgeben, sondern in EINER Tabelle zusammenfassen. Ich habe schon probiert aus den Werten mittels
    PHP-Code:
    array_push($anzahl_in_server1$row['incount']); 
    ein Array zu bilden, was auch funktioniert. Wenn ich das Array jedoch wieder ausgeben möchte, schreibt er mir das in jede Zeile und nicht jeden Wert einzeln. Habt ihr eine Idee?

  • #2
    wieso überhaupt 2 Tabellen? Das ist ganz schlechtes DB-Design. wieso nimmst du nicht eine zusätzliche Spalte, die dann entweder den wert 1 oder 2 enthält, für deine server? Dann sparst du dir auch das zählen, wenn ich das so richtig verstanden hab.
    Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

    Kommentar


    • #3
      Zitat von marvinmarvin Beitrag anzeigen
      Wenn ich das Array jedoch wieder ausgeben möchte, schreibt er mir das in jede Zeile und nicht jeden Wert einzeln.
      Was soll das denn heißen? Vielleicht zeigst du mal was rauskommt und was du gerne hättest.

      Kommentar


      • #4
        2 Anmerkungen am Rande:

        - die mysql_ Erweiterung ist veraltet und wird bald nicht mehr funktionieren, Stichwörter: mysqli oder PDO http://php.net/manual/en/migration55.deprecated.php

        - SELECT * ist pfui http://php-de.github.io/jumpto/code-smells/#select-
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Zitat von Geromel Beitrag anzeigen
          wieso überhaupt 2 Tabellen? Das ist ganz schlechtes DB-Design. wieso nimmst du nicht eine zusätzliche Spalte, die dann entweder den wert 1 oder 2 enthält, für deine server? Dann sparst du dir auch das zählen, wenn ich das so richtig verstanden hab.
          Das wäre toll gewesen leider kann ich die DB nicht ändern und muss diese so nehmen.

          Kommentar


          • #6
            Zitat von Tropi Beitrag anzeigen
            Was soll das denn heißen? Vielleicht zeigst du mal was rauskommt und was du gerne hättest.
            Hier einmal der Befehl:

            PHP-Code:
            $gesamt_in_beide foobar_in($anzahl_in_server1$anzahl_in_server2); 
            und in der Tabelle:
            PHP-Code:
            echo "<td>"$gesamt_in_beide[0], "</td>"
            Okay, also das kommt raus wenn ich das "gepushte" Array wieder ausgebe:

            Kommentar


            • #7
              Zitat von marvinmarvin Beitrag anzeigen
              Hier einmal der Befehl:

              PHP-Code:
              $gesamt_in_beide foobar_in($anzahl_in_server1$anzahl_in_server2); 
              und in der Tabelle:
              PHP-Code:
              echo "<td>"$gesamt_in_beide[0], "</td>"
              Okay, also das kommt raus wenn ich das "gepushte" Array wieder ausgebe:
              Also so sieht es dann in der while-Schleife aus:
              PHP-Code:
              echo "<td>",substr ($row['time'],0,10), "</td>";
                  echo 
              "<td>"$gesamt_in_beide[0], "</td>";
                  echo 
              "<td>"$row['incount'], "</td>";
                  echo 
              "<td>"$row['incountssl'], "</td>"
              Was ich jedoch möchte ist, dass einfach Wert1 mit dem anderen Wert1 addiert wird (aus der anderen while-Schleife):

              Kommentar


              • #8
                Was spricht gegen einen Join, anstatt das in PHP zu machen?

                PS: mysql_* ist veraltet. Nutze stattdessen PDO oder MySQLi.
                Zitat von derwunner
                "Ein FISI ist auf gut-deutsch der Netzwerker. Das heißt Du gehst rauß zum Kunden oder auf die Straße und verlegst Leitungen" - derwunner 2015

                Kommentar


                • #9
                  Zitat von CrocoBlack Beitrag anzeigen
                  Was spricht gegen einen Join, anstatt das in PHP zu machen?

                  PS: mysql_* ist veraltet. Nutze stattdessen PDO oder MySQLi.
                  Danke für den Hinweis! Ich habe es mit einem Inner join probiert. Dies gibt mir nun von server2 jeden Eintrag drei mal aus

                  PHP-Code:
                  "SELECT time, incount, incountssl FROM server1 INNER JOIN server2 
                    WHERE server1.time >= '
                  $idfeld_links' AND server1.time <= '$idfeld_rechts
                        AND server2.time >= '
                  $idfeld_links' AND server2.time <= '$idfeld_rechts'" 

                  Kommentar


                  • #10
                    Wenn du einfach alle Datensätze hintereinander willst, probiers mal mit union.
                    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                    Kommentar


                    • #11
                      UNION ist der richtige Ansatz, wenn ich das richtig sehe soll das Ergebnis aber auch noch zusammen gezählt werden. Also muss man noch eine Abfrage um das UNION bauen.

                      Ungetested:

                      Code:
                      SELECT 
                          time,SUM(incount),SUM(incountssl)
                      FROM (
                          SELECT 
                              time, incount, incountssl 
                          FROM 
                              server1 
                          WHERE 
                              server1.time >= '$idfeld_links' AND server1.time <= '$idfeld_rechts'  
                      UNION
                          SELECT 
                              time, incount, incountssl 
                          FROM 
                              server2  
                          WHERE 
                              server2.time >= '$idfeld_links' 
                              AND server2.time <= '$idfeld_rechts'
                          ) AS temp
                      GROUP BY
                          time
                      Vieles kann, wenig muss.

                      Kommentar


                      • #12
                        Zitat von Varon Beitrag anzeigen
                        UNION ist der richtige Ansatz, wenn ich das richtig sehe soll das Ergebnis aber auch noch zusammen gezählt werden. Also muss man noch eine Abfrage um das UNION bauen.

                        Ungetested:

                        Code:
                        SELECT 
                            time,SUM(incount),SUM(incountssl)
                        FROM (
                            SELECT 
                                time, incount, incountssl 
                            FROM 
                                server1 
                            WHERE 
                                server1.time >= '$idfeld_links' AND server1.time <= '$idfeld_rechts'  
                        UNION
                            SELECT 
                                time, incount, incountssl 
                            FROM 
                                server2  
                            WHERE 
                                server2.time >= '$idfeld_links' 
                                AND server2.time <= '$idfeld_rechts'
                            ) AS temp
                        GROUP BY
                            time
                        Das sieht schonmal super aus, besser als mein anderer Versuch
                        Nun sollte ich die Daten ausgeben, was sich jedoch als schwierig herausstellt

                        PHP-Code:
                        while($row=mysql_fetch_array($incount)){
                            echo 
                        "<tr align='center' bgcolor=#F5F2CD>";
                            echo 
                        "<td>",substr ($row['time'],0,10), "</td>";
                            echo 
                        "<td>"$row['incount'], "</td>";
                            echo 
                        "<td>"$row['incountssl'], "</td>";
                            echo 
                        "</tr>";
                            } 
                        Genau die Variable kennt er nicht mehr (undefined index). Wie sollte ich deiner Ansicht nach die Ausgabe gestalten?

                        Kommentar


                        • #13
                          PHP-Code:
                          SELECT 
                              time
                          ,SUM(incount) AS incount,SUM(incountssl) AS incountssl 
                          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                          Kommentar


                          • #14
                            Zitat von VPh Beitrag anzeigen
                            PHP-Code:
                            SELECT 
                                time
                            ,SUM(incount) AS incount,SUM(incountssl) AS incountssl 
                            Es hat funktioniert! Danke! Nun werden die Daten aus zwei Tabellen in einer zusammengefasst und ausgegeben.

                            Kommentar

                            Lädt...
                            X