Ankündigung

Einklappen
Keine Ankündigung bisher.

Sql Daten der letzten 3 Wochen erhalten [Wöchentlich]

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

  • Sql Daten der letzten 3 Wochen erhalten [Wöchentlich]

    Hey,

    ich mag gerne aus der Datenbank mit den Statistiken die Benutzer Aufrufe wöchentlich ausgeben, was gut funktioniert. Jetzt hat mich heute der inhaber der Seite angesprochen un mag die Statistiken der letzten 3 Wochen angegeben haben.
    nun brauche ich eure hilfe. Ich habe schon ein Diagram vorbereitet wo ich drei Graphen mit unterschiedlichen Farben habe. nun möchte ich die Daten der letzten 3 Wochen jeweils anzeigen. Das ganze ist Tagesgebunden, am Monatg wird von Montag -> Sonntag gezeigt und am Mittwoch von Mittwoch(Heutiger Tag) -> Dienstag(letzte Woche).

    Nun ist mein Problem die Daten aus der Datenbank zu holen, für die eine Woche habe ich das noch hinbekommen aber das ganze geteilt in 3 Teile für jede Woche einen einzelnen Array aus den Daten bekomme ich nicht hin.
    Ich packe mal hier den Code mit bei:

    PHP-Code:
    <?php
    $sql 
    "SELECT MONTH(visit_date) AS 'MONTH', DAY(visit_date) AS 'DAY', COUNT(1) AS visits FROM `visits` WHERE visit_date > DATE_SUB(NOW(), INTERVAL 6 DAY) GROUP BY MONTH(visit_date), DAY(visit_date)";
    $result $conn->query($sql);

    if(!
    $result){
    die(
    "Retriving Query Error<br>".$sql);
    }

    $visits = [];
    $days = [];
    foreach (
    $result as $row) {
    $visits[] = $row['visits'];
    $dt = new DateTime();
    $dt->setDate(date("Y"),$row['MONTH'], $row['DAY']);
    $days[] = $dt->format('D');
    }
    ?>

    <script type="text/javascript">
    var nrVisitors = <?php echo json_encode($visits); ?>;
    var days = <?php echo json_encode($days); ?>;
    </script>
    Und hier wie es dann in das Script eingetragen wird
    Code:
    var data1 = {
    labels: days,
    datasets: [{
    label: "Aktuell",
    data: nrVisitors,
    fill: true,
    borderWidth: 4,
    borderColor: '#3949AB',
    backgroundColor: '#3949AB',
    hoverborderColor: '#3949AB',
    hoverBackgroundColor: '#3949AB',
    }, {
    label: "Letze Woche",
    data: nrVisitors2,
    fill: true,
    cubicInterpolationMode: 'monotone',
    borderWidth: 0,
    borderColor: '#463699',
    backgroundColor: '#463699',
    hoverborderColor: '#463699',
    hoverBackgroundColor: '#463699',
    }, {
    label: "Woche 3",
    data: nrVisitors3,//[83, 45, 60, 45, 45, 55, 45]
    fill: true,
    borderWidth: 4,
    borderColor: '#2ca961',
    backgroundColor: '#2ca961',
    hoverborderColor: '#2ca961',
    hoverBackgroundColor: '#2ca961',
    }]
    };

  • #2
    Dann habe ich noch ein kleines Problem bei dem anderen Diagram, da hat sich mit der neuen Version die Eintragung der Daten geändert und da funktionieren meine 2 Arrays nocht mehr.
    Momentan habe ich dort einen der die Namen der Downloaddatein enthält und der andere der die anzahl enthält. Bisher wurden die wie hier eingetragen:
    Code:
    data: {
    labels: Filename,
    datasets: [{
    data: nrFiledownloads,
    backgroundColor: ['#28a78e', '#1e90ff', '#7d0f48'],
    }],
    },
    Nun müssen die aber so eingetragen werden:
    Code:
    data: [
    ['File1', 6],
    ['File2', 3],
    ['File3', 4],
    ]
    Wie kann ich dann mein System am Effizientesten umbauen? Das Problem dabei ist die Datein können mal mehr und mal weniger sein weshalb ich das nicht feste eintragen kann.
    Hier ist der Teil der die Daten bisher ausgegeben hat.
    PHP-Code:
    <?php
    $sql 
    "SELECT filename, COUNT(1) AS nr FROM downloads WHERE download_date > DATE_SUB(NOW(), INTERVAL 6 DAY) GROUP BY filename;";
    $result $conn->query($sql);

    if(!
    $result){
    die(
    "Retriving Query Error<br>".$query);
    }

    $nrfiledownloads = [];
    $filename = [];
    foreach (
    $result as $row) {
    $nrfiledownloads[] = $row['nr'];
    $filename[] = $row['filename'];
    }
    //var_dump($nrfiledownloads);
    //var_dump($filename);
    ?>

    <script type="text/javascript">
    var nrFiledownloads = <?php echo json_encode($nrfiledownloads); ?>;
    var Filename = <?php echo json_encode($filename); ?>;
    //console.log(nrFiledownloads);
    //console.log(Filename);
    </script>
    Sorry, dass ich so viele "dumme" Fragen setlle, aber ich bin gerade dabei mir javascript und sql ein wenig anzusehen um dass in zukunft selber hin zu bekommen.

    Kommentar


    • #3
      Was für ein Skript benutzt Du denn, um die Diagramme zu erzeugen, chart.js?

      Kommentar


      • #4
        Zitat von Sempervivum Beitrag anzeigen
        Was für ein Skript benutzt Du denn, um die Diagramme zu erzeugen, chart.js?
        Es sind 2 Unterschiedliche, das erste ist Chart.js das zweite nutz Highcharts (3d)

        Kommentar


        • #5
          Du brauchst das PHP doch nur ein wenig umzustellen, um die neue Struktur zu erzeugen:
          Code:
          <?php
          $sql = "SELECT filename, COUNT(1) AS nr FROM downloads WHERE download_date > DATE_SUB(NOW(), INTERVAL 6 DAY) GROUP BY filename;";
          $result = $conn->query($sql);
          
          if(!$result){
          die("Retriving Query Error<br>".$query);
          }
          
          $data = [];
          foreach ($result as $row) {
              $data[] = [$row['filename'], $row['nr']];
          }
          //var_dump($data);
          ?>
          
          <script type="text/javascript">
          var data = <?php echo json_encode($data); ?>;
          //console.log(data);
          </script>
          (ungetestet)

          Kommentar


          • #6
            Bei der ersten Frage verstehe ich noch nicht vollständig, was Du vorhast: Möchtest Du ein Balkendiagramm mit nur 3 Balken erzeugen, einer für jede Woche? Oder 3 Gruppen mit je 7 Balken für jeden Tag?

            Kommentar


            • #7
              Zitat von Sempervivum Beitrag anzeigen
              Bei der ersten Frage verstehe ich noch nicht vollständig, was Du vorhast: Möchtest Du ein Balkendiagramm mit nur 3 Balken erzeugen, einer für jede Woche? Oder 3 Gruppen mit je 7 Balken für jeden Tag?
              Ok, kein Problem ist auch etwas Kompliziert erklärt. Hier mal ein Bild wie in etwa das aussehen wird.

              Screenshot_2021-02-03 area datasets Chart js sample.png

              Und dann stehen unten die wochentage [Donnerstag, Freitag, Samstag, Sonntag, Montag, Dienstag, Mittwoch] (Beispiel Heute)

              Und dann sollen bei jeder der Daten (Farben Blau / Grün / Rot) die Daten für [Diese Woche], [Letzte Woche] und [Vorletzte Woche]

              Kommentar


              • #8
                Denke, jetzt verstehe ich. Und welche Bibliothek willst Du dafür verwenden, Highcharts oder chart.js?

                Kommentar


                • #9
                  Zitat von Sempervivum Beitrag anzeigen
                  Denke, jetzt verstehe ich. Und welche Bibliothek willst Du dafür verwenden, Highcharts oder chart.js?
                  Da wollte ich Chart.js benutzen.

                  Kommentar


                  • #10
                    Bei dem anderen ist jetzt noch das Problem dass die Zahl als String im Array steht und nicht als Zahl, was das Diagram von Highcharts nicht verwenden kann.
                    Bekomme dann immer den fehler:
                    Code:
                    www.highcharts.com/errors/14
                    Zudem müsste bei mehreren immer ein comma nach dem Array sein.

                    Kommentar


                    • #11
                      Ich würde die vergangenen 21 Tage abfragen und die Anzahl nach Tag gruppieren. Dann mit PHP die Datensätze für die 3 Wochen aufbereiten. Sicher könnte man es auch mit PDO gruppieren, aber es würde unübersichtlich und ich kann keinen Vorteil darin erkennen.

                      Kommentar


                      • #12
                        Bei dem anderen ist jetzt noch das Problem dass die Zahl als String im Array steht und nicht als Zahl, was das Diagram von Highcharts nicht verwenden kann.
                        Meinst Du jetzt das mit den Dateinamen?

                        Kommentar


                        • #13
                          Zitat von Sempervivum Beitrag anzeigen
                          Meinst Du jetzt das mit den Dateinamen?
                          Richtig, das ist mit den Datei namen

                          Kommentar


                          • #14
                            Dann verstehe ich es nicht, das Ergebnis von count müsste numerisch sein. Gib doch mal das Ergebnis, $data, mit var_dump aus.

                            Kommentar


                            • #15
                              var_dump gibr:
                              Code:
                              array(1) { [0]=> array(2) { [0]=> string(17) "Launcher.exe" [1]=> string(2) "47" } }
                              aus.
                              consol.log gibt:
                              Code:
                              (1) […]
                              ​
                              0: (2) […]
                              ​​
                              0: "Launcher.exe"
                              ​​
                              1: "47"
                              ​​
                              length: 2
                              ​​
                              <prototype>: Array []
                              ​
                              length: 1
                              ​
                              <prototype>: Array []
                              index.php:680:13

                              Kommentar

                              homepage-forum.de - Hilfe für Webmaster! Statistiken

                              Einklappen

                              Themen: 56.802   Beiträge: 430.056   Mitglieder: 28.555   Aktive Mitglieder: 54
                              Willkommen an unser neuestes Mitglied, Fohlenfan.

                              Online-Benutzer

                              Einklappen

                              205 Benutzer sind jetzt online. Registrierte Benutzer: 4, Gäste: 201.

                              Mit 3.502 Benutzern waren am 23.01.2020 um 18:20 die meisten Benutzer gleichzeitig online.

                              Die neuesten Themen

                              Einklappen

                              Die neuesten Beiträge

                              Einklappen

                              Lädt...
                              X