Mysql Select, Sum, Where, Group Problem.

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

  • Mysql Select, Sum, Where, Group Problem.

    Guten Abend,

    leider komme Ich mit einem Script nicht weiter und ersuche deshalb hier im Forum Hilfe.

    Ich habe eine Tabelle in meiner Datenbank, aufgebaut ist diese wie folgt.

    Datum,User,Material,Anzahl

    13.11.2019, UsernameXYZ, MaterialABC, 106
    13.11.2019, UsernameABC, MaterialXYZ, 101
    13.11.2019, UsernameXYZ, MaterialABC, 102
    13.11.2019, UsernameABC, MaterialXYZ, 109

    Jetzt möchte Ich eigtl. das der UsernameXYZ der per Drop Down Menü ausgewählt wird $_POST das auf Ihn eingetragene Material mit der gesamten Anzahl angezeigt bekommt.

    Ich habe schon einiges probiert, bekomme es aber nicht zu laufen.

    Hier mal ein Code Snipped:

    if($_POST['techniker'] != "") {

    $techniker = $_POST['techniker'];
    echo 'X'.$techniker.'';
    $sql = "SELECT material, SUM(anzahl) AS sum_anzahl FROM " . $lager . "log WHERE techniker ='Christopher' GROUP BY Christopher";
    $query = mysqli_query( $myconnect, $sql);
    while ($data = mysqli_fetch_array($query)) {
    $zeit = $data['datum'];
    $name = $data['user'];
    $artikel = $data['material'];
    $anzahl = $data['anzahl'];
    $monat = $data['monat'];
    $sum_anzahl = $data['sum_anzahl'];

    Echo ‚Bla Bla,;
    }

    Ich danke für ein bisschen Unterstützung!!!

  • #2
    Uijuijui. Ganz schlechtes Datenbankdesign. Du solltest dich erst mal mit dem Thema Normalisierung beschäftigen. Dann ist das auch mit den Abfragen viel einfacher.

    Gruß
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Das ist ja ein SQL-Problem, daher solltest du den ganzen PHP-Code erstmal weglassen. Wenn du willst, dass dir jemand hilft, solltest du auch immer ein nachvollziehbares Beispiel liefern, hier fehlen Testdaten. Für PHP kannst du mit PDO einfach eine temporäre SQLite Datenbank anlegen und da Daten reinballern, die stehen dann auch im PHP-Code

      PHP-Code:
      $pdo = new PDO('sqlite::memory:'); 
      Und es gibt auch Onlinetools: http://sqlfiddle.com/#!17/d14ee/2

      Ausserdem bekommst du mit deinem SELECT direkt einen SQL-Fehler, weil GROUP BY einen Spaltennamen/Ausdruck erwartet, und keinen Wert, der Wert steht im WHERE. Sowas solltest du dir auf deinem Testsystem immer anzeigen lassen

      PHP-Code:
      mysqli_report(MYSQLI_REPORT_ERROR MYSQLI_REPORT_STRICT); 
      MySQL hat die blöde Eigenschaft bei GROUP BY wichtige Fehlermeldungen zu unterdrücken und stattdessen zufällige Ergebnisse zu liefern. Wenn du gruppierst musst du darauf achten, dass jede Spalte die du auswählst entweder im GROUP BY steht, oder über eine Aggregatfunktion (sum, avg, concat, ...) läuft - das fehlt bei "material", hier würdest du unter MySQL ein zufälliges Material bekommen, in anderen Datenbanken endet das in einer Fehlermeldung.

      Kommentar


      • #4
        @Peter: Ich neige dazu, dir zu widersprechen, da wir ansonsten ja nichts über die Anwendung wissen.
        Wenn der Name eines Materials eindeutig und unveränderlich ist, und gleiches auch für einen Benutzer gilt (also beides als eindeutiger Kennzeichner geeignet ist) dann sind die Daten normalisiert.
        Dazu bedarf es keiner zusätzlichen numerischen ID. Das darf durchaus ein String sein, der dann auch gerade bei sowas einfachem die Lesbarkeit für den Menschen deutlich erhöht.
        Wenn der Name darüber hinaus sogar die einzige Eigenschaft eines Benutzers und Materials ist, dann wäre eine weitere Normalisierung sogar nachteilig sein. (Übernormalisierung)

        Die Anwendung ist ja ziemlich trivial.

        Viele Grüße
        Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
        When everything else fails, manipulate the data...
        Beschriftungen / Großformatdruck / Werbemittel

        Kommentar


        • #5
          Zitat von highrise Beitrag anzeigen
          @Peter: Ich neige dazu, dir zu widersprechen, da wir ansonsten ja nichts über die Anwendung wissen.
          Wenn der Name eines Materials eindeutig und unveränderlich ist, und gleiches auch für einen Benutzer gilt (also beides als eindeutiger Kennzeichner geeignet ist) dann sind die Daten normalisiert.
          Dazu bedarf es keiner zusätzlichen numerischen ID. Das darf durchaus ein String sein, der dann auch gerade bei sowas einfachem die Lesbarkeit für den Menschen deutlich erhöht.
          Wenn der Name darüber hinaus sogar die einzige Eigenschaft eines Benutzers und Materials ist, dann wäre eine weitere Normalisierung sogar nachteilig sein. (Übernormalisierung)
          Usernamen und Materialnamen können sich ändern. Also nach meiner jahrelangen Erfahrung als Software-Entwickler werden "unveränderliche" Dinge oft veränderlich. Und dann ist es wesentlich einfacher, wenn man das von Grund auf vorgesehen hat, als später hinterher die halbe Anwendung umkrempeln muss.

          Zum Beispiel der User "erika_musterfrau" könnte geheiratet haben und jetzt "erika_mustermann" heißen.

          Selbst "IDs", die von einem anderen System importiert wurden, haben sich schon oft genug geändert. Deswegen würde ich Fremd-IDs auch nie als Primärschlüssel verwenden, sondern als zusätzliche Spalte mitführen.
          Zuletzt geändert von h3ll; 24.11.2019, 09:29.

          Kommentar


          • #6
            h3ll, woher weißt du, dass sie sich ändern können? Du kennst doch die Anwendung gar nicht.

            Wieso benötigt Erika einen neuen Benutzernamen, weil sich ihr tatsächlicher Nachname geändert hat? Und mal ganz auf die Spitze getrieben Stelle ich die Frage, ob seit DSGVO der Nachname überhaupt im Benutzernamen reflektiert sein sollte, denn er ist nicht notwendig.

            Für die hier vorgestellte Anwendung ist das so völlig in Ordnung.

            Die Erklärung von chorn beantwortet die Frage ja auch ganz hervorragend.
            Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
            When everything else fails, manipulate the data...
            Beschriftungen / Großformatdruck / Werbemittel

            Kommentar


            • #7
              Zitat von highrise Beitrag anzeigen
              h3ll, woher weißt du, dass sie sich ändern können? Du kennst doch die Anwendung gar nicht.
              Und du bist Hellseher und kannst in die Zukunft blicken?

              Zitat von highrise Beitrag anzeigen
              Wieso benötigt Erika einen neuen Benutzernamen, weil sich ihr tatsächlicher Nachname geändert hat?
              Eventuell hat Erika Mustermann sich von Max Mustermann scheiden lassen und möchte nicht mehr mit ihrem Benutzernamen an ihren Ex-Mann erinnert werden? Willst du es ihr verbieten?

              Zitat von highrise Beitrag anzeigen
              Und mal ganz auf die Spitze getrieben Stelle ich die Frage, ob seit DSGVO der Nachname überhaupt im Benutzernamen reflektiert sein sollte, denn er ist nicht notwendig.
              Bin kein Rechtsanwalt, aber in vielen Firmen ist sowas üblich. In der Firma, in der ich arbeite, enthält auch der Benutzername den Nachnamen. Und nicht nur das, der Benutzername enthält sogar den Abteilungsnamen. Also wenn ein Mitarbeiter in eine andere Abteilung wechselt, ändert sich auch sein Benutzername.

              Kommentar


              • #8
                Du hast Recht und ich hab meine Ruhe.
                Schade, dass sich auch nach mehreren Jahren hier nicht viel geändert hat.
                Ich bin dann mal wieder weg. Bis in ein paar Jahren vielleicht in der Hoffnung, dass einige Scriptkiddies hier doch noch erwachsen werden.
                Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                When everything else fails, manipulate the data...
                Beschriftungen / Großformatdruck / Werbemittel

                Kommentar


                • #9
                  Zitat von highrise Beitrag anzeigen
                  Du hast Recht und ich hab meine Ruhe.
                  Schade, dass sich auch nach mehreren Jahren hier nicht viel geändert hat.
                  Ich bin dann mal wieder weg. Bis in ein paar Jahren vielleicht in der Hoffnung, dass einige Scriptkiddies hier doch noch erwachsen werden.
                  Wenn deine einzige Reaktion auf Fakten ist die beleidigte Leberwurst zu spielen, solltest du dich besser von Foren fern halten, das tut dir nicht gut.

                  Kommentar


                  • #10
                    Das Problem ist, dass deine Fakten keine Fakten sind, sondern Vermutungen, und du das nicht einsieht. Stattdessen fragst du nach meinen hellseherischen Fähigkeiten. Die gibt es nicht, aber zur Lösung des akuten Problems sind die auch gar nicht nötig.

                    Es geht hier um ein klar definiertes Problem, und nicht um geratene möglicherweise zukünftig eintretende Derivate. Es geht auch nicht um eine Bewertung des design, denn dazu fehlen einfach viel zu viele Parameter, die der Fragesteller schlicht nicht mitgeteilt hat.

                    Und an der Stelle muss man nun einem offensichtlichen Anfänger nicht gleich noch zwei neue Probleme eröffnen, wo es nicht notwendig ist. Aufgrund der vorliegenden Informationen reicht der Grad der Komplexität aus. Vielleicht ergibt sich mit zunehmender Anforderung auch zunehmender Bedarf an Normalisierung oder sonstigem, aber zum gegeben Problem genügt das so.

                    Um genau eine Schraube in Brett zu drehen, benötigst du genau einen passenden Schraubendreher. Klar könnte es in Zukunft änder Schrauben geben, und Wechselbits sind ganz toll, oder ein Akkuschrauber, aber das ist alles nur geraten. Für das akute Problem genügt ein 1,- Euro Schraubendreher vom wühltisch. Möglicherweise brauche ich dann doch irgendwann einen Akkuschrauber für 99 Euro, und muss damit klarkommen, dass ich mir den 1Euro hätte sparen können, wenn ich gleich den Akkuschrauber gekauft hätte... andersherum kann ich aber ggf 98 Euro sparen, wenn ich jetzt einfach nur das akute Problem betrachte...

                    Es liegt nicht an den Foren, es liegt immer nur an ihren Mitgliedern ... und du hast mir gerade eindrucksvoll gezeigt, dass ich mich hier nicht wohlfühle.

                    Ich bedanke mich dafür, dass du mir das vorschlägst, was ich ja ohnehin schon angekündigt hatte.
                    Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                    When everything else fails, manipulate the data...
                    Beschriftungen / Großformatdruck / Werbemittel

                    Kommentar

                    Lädt...
                    X