Ankündigung

Einklappen
Keine Ankündigung bisher.

Abfrage Hilfe bei chart.js

Einklappen

Neue Werbung 2019

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

  • Abfrage Hilfe bei chart.js

    Liebe Forumgemeinde,

    ich trete vermutlich mit einen für euch leicht zu lösenden Problem an euch, aber ich hab schon viel probiert und komme einfach nicht auf einen Lösung

    Ich würde gerne einen Kuchen Diagramm anzeigen lassen, ich habe eine SQL Tabelle mit verschiedenen Spalten wichtig für meine Abfrage wäre der TYP und ich möchte nun den Typ counten wie oft dieser vorkommt und diese Zahl plus Typ ausgeben

    Momentan hab ich es so gelöst , mir ist bewusst das dies sehr umständlich erscheint und suche deshalb eine "schönere Lösung" damit ich mir das gleich korrekt anlerne und angewöhne

    PHP-Code:
    // SQL Abfrage - Anzahl von typ Beispiel1
    $Beispiel1 'SELECT count(id) as "id" FROM `abfragen` WHERE typ = "Beispiel1"';
    $Beispiel1Result $conn->query($Beispiel1);


    if (
    $Beispiel1Result->num_rows 0) {

    while(
    $row $Beispiel1Result->fetch_assoc()) {

       
    $ErgebnisBeispiel1 $row['id'];

    }
    } else {
    echo 
    "<h3>Eintrag nicht gefunden!<br></h3>";
    }    



    // SQL Abfrage - Anzahl von typ Beispiel2
    $beispiel2'SELECT count(id) as "id" FROM `abfragen` WHERE typ = "beispiel2"';
    $beispiel2Result $conn->query($beispiel2);


    if (
    $beispiel2Result->num_rows 0) {

    while(
    $row $beispiel2Result->fetch_assoc()) {

       
    $ErgebnisBeispiel2 $row['id'];

    }
    } else {
    echo 
    "<h3>Eintrag nicht gefunden!<br></h3>";
    }    

    // SQL Abfrage - Anzahl von typ Beispiel3
    $Beispiel3 'SELECT count(id) as "id" FROM `abfragen` WHERE typ = "Beispiel3"';
    $Beispiel3Result $conn->query($Beispiel3);


    if (
    $Beispiel3Result->num_rows 0) {

    while(
    $row $Beispiel3Result->fetch_assoc()) {

       
    $ErgebnisBeispiel3 $row['id'];

    }
    } else {
    echo 
    "<h3>Eintrag nicht gefunden!<br></h3>";


    und die variablen trage ich dann in die Javascript Datei mittels eines php echos ein, der vollständigkeitshalber zeige ich auch diesen code


    Code:
    <script type="text/javascript">
    
    // Set new default font family and font color to mimic Bootstrap's default styling
    Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
    Chart.defaults.global.defaultFontColor = '#292b2c';
    
    // Pie Chart Example
    var ctx = document.getElementById("myPieChart");
    var myPieChart = new Chart(ctx, {
      type: 'pie',
      data: {
        labels: [ "Beispeil1", "Beispiel2", "Beispiel3 "],
        datasets: [{
          data: [ <?php echo $ErgebnisBeispiel1; ?> ,<?php echo $ErgebnisBeispiel2; ?> ,<?php echo $ErgebnisBeispiel3; ?>],
          backgroundColor: ['#007bff', '#dc3545', '#ffc107', '#28a745'],
        }],
      },
    });
    Gibt es hier eine elegantere Lösung , daher ich was das mysqli noch ein richtiger Anfänger bin ist mir jetzt Adhoc keine Möglichkeit eingefallen ohne while schleife obwohl mir bewusst ist das dies total überflüssig ist

    Ich wäre um euren Rat und Tipps äusserst dankbar

  • #2
    select typ, count(1) from ... where typ in ('beispiel1','beispiel2','beispiel3') group by typ

    Somit nur ein Gnag zur DB.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Danke vielmals für die Erklärung, ich glaube das hat mir sehr geholfen ...

      In Bezug auf die Statisitik habe ich nun eine weiter Frage ...


      Ich habe eine Abfrage gemacht die mir die Rows pro Tag / Woche und Monat ausgibt - nun hab ich jedoch folgendes Problem ... bei der Abfrage zur Kalenderwoche welche ich so angefertigt habe :

      Code:
       SELECT year(open_timestamp), week(open_timestamp) as Woche, count(*) as "anzahl" FROM abfragen GROUP BY year(open_timestamp), week(open_timestamp)';
      kriege ich teilweise falsche Ergebnisse bei der Kalenderwoche. Einträge zu gestern werden der Woche 26 zugeordnet obwohl ja bereits die KW27 läuft und auch morgen zu ende geht . er ist also irgendwie eine Woche hinten nach oder beginnt irgendwo falsch zu zählen ? Hab ich hier irgendwo einen Logik fehler begangen ?

      Meine zweite Frage ist , ich hätte gerne aus den generierten Rows also die Anzahl pro Kalenderwoche nun ein Average generiert, mein erster stümperhafter Versuch brachte leider kein Ergebnis
      Code:
      SELECT DAY(open_timestamp) as "Tag", MONTH(open_timestamp) as "Monat", year(open_timestamp) as "Jahr" , COUNT(*) as "Anzahl", avg(Anzahl) as "Durchschnitt"  from abfragen GROUP by Tag, Monat, Jahr order by Monat, Tag
      Mir ist im nachhinein auch bewusst das die Spalte "Anzahl" nicht benutzt werdne kann in Avg aber könnt ihr mir ein Tipp geben wie das zu verwirklichen ist ?

      Ganz liebe Grüße und 1000 Dank an dieser Stelle

      Kommentar


      • #4
        week kennt 2 Parameter, du gibst aber nur einen an, damit wird von 0 also Sonntag als ersten Tag der Woche ausgegangen. Du musst aber mode auf 1 setzen.
        Siehe Handbuch: https://dev.mysql.com/doc/refman/8.0...#function_week

        Code:
        SELECT year(`open_timestamp`), week(`open_timestamp`,1) as `Woche`, count(*) as `Anzahl`
        FROM `abfragen`
        GROUP BY year(`open_timestamp`), week(`open_timestamp`,1)';
        Du solltest zudem immer `Backticks` um die Spaltennamen verwenden und einheitlich bleiben, entweder Klein- oder Grossschreibung.

        Kommentar


        • #5
          Super pefekt hat funktioniert ! auch danke für die weiteren Tipps ...

          Hast du vielleicht auch eine Lösung zu den Average Problem ? Hab gelesen man kann abfragen in einer Abfrage verschachteln , wäre das hier eine Lösung ?

          Kommentar


          • #6
            Bei Datenbankproblemen ist es hilfreich, wenn du mal deine Struktur und ein paar Testdaten als Create Statement zur Verfügung stellst.
            Alternativ kannst du auch ein sqlfiddle erzeugen.

            Kommentar

            Lädt...
            X