PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

13-11-2019, 23:42
|
Pajoma
Registrierter Benutzer
|
|
Registriert seit: Nov 2019
Beiträge: 1
|
|
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!!!
|

14-11-2019, 20:56
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.804
|
|
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
|

15-11-2019, 08:12
|
chorn
Registrierter Benutzer
|
|
Registriert seit: Nov 2011
Beiträge: 214
|
|
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.
|

24-11-2019, 01:39
|
highrise
Registrierter Benutzer
|
|
Registriert seit: Apr 2006
Ort: zu Hause *g*
Beiträge: 264
|
|
@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
|

24-11-2019, 09:25
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.883
|
|
Zitat:
Zitat von highrise
@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.
Geändert von h3ll (24-11-2019 um 09:29 Uhr)
|

24-11-2019, 12:01
|
highrise
Registrierter Benutzer
|
|
Registriert seit: Apr 2006
Ort: zu Hause *g*
Beiträge: 264
|
|
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.
|

24-11-2019, 17:46
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.883
|
|
Zitat:
Zitat von highrise
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:
Zitat von highrise
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:
Zitat von highrise
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.
|

24-11-2019, 17:54
|
highrise
Registrierter Benutzer
|
|
Registriert seit: Apr 2006
Ort: zu Hause *g*
Beiträge: 264
|
|
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.
|

24-11-2019, 18:05
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.883
|
|
Zitat:
Zitat von highrise
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.
|

24-11-2019, 18:52
|
highrise
Registrierter Benutzer
|
|
Registriert seit: Apr 2006
Ort: zu Hause *g*
Beiträge: 264
|
|
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.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|