SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 20.10.2014, 21:07:20
Guenther Guenther ist offline
Anfänger
 
Registriert seit: Oct 2014
Alter: 61
Beiträge: 3
Tabelle sortieren und Werte berechnen

Hallo.

Lange lese ich hier schon mit und habe schon viel nützliches hier lernen können. Heute aber stehe ich selbst komplett auf dem Schlauch.

Ich habe eine Tabelle, die als eine Art Jahresübersicht ausgegeben werden soll. Die Tabelle wird extern mit Daten versorgt.

Struktur Tabelle A: Id, Name, Jan, Feb, Mrz, ... Dez
Alle Zahlenfelder sind vom Typ Integer, unsigned. Das Feld Id ist Primärschlüssel.

Inhalt:
1 Meyer, 123, 234, 456, ...
2 Müller, 234, 456, 123, ...
3 Schulz, 456, 123, 234 ...

Die Ausgabe soll so aussehen:

Code:
Name   OKT      SEP      AUG      ...
Meyer  123 (3)  234 (2)  456 (1)  ...
Schulz 456 (1)  123 (3)  234 (2)  ...
Müller 234 (2)  456 (1)  123 (3)  ...
Die Tabelle soll nach den jeweils letzten Monatswerten (Aktueller Monat -1) sortiert ausgegeben werden. Zusätzlich soll für jeden einzelnen Eintrag die Platzierung () mit ausgerechnet werden.

Folgende Bedingungen sollen erfüllt sein:
  • Die Platzierungen können nicht in der Tabelle gespeichert werden, da sich die Punkte durch Nachmeldungen und Korrekturen bis zu 6 Monate rückwirkend ändern können.
  • Ergeben sich gleiche Punktzahlen für 2 Personen in einem Monat, so bekommt derjenige die höhere Platzierung, der auch im Vormonat (Vor-Vormonat, ...) die höhere Punktzahl hatte.
  • Die erste Monatsspalte enthält immer die Daten des Vormonats, danach rückwärts die letzten 11 Monate.

Bin hier schier am verzweifeln und hoffe auf eure Mithilfe.

lg
Günther
Mit Zitat antworten
  #2  
Alt 23.10.2014, 02:05:28
Guenther Guenther ist offline
Anfänger
 
Registriert seit: Oct 2014
Alter: 61
Beiträge: 3
AW: Tabelle sortieren und Werte berechnen

Hm, hat keiner einen Ansatz für mich?

Ich muss ja zugeben, das ich was MySQL angeht, nicht so der Erfahrene bin. Diese Aufgabe übersteigt meine Vorstellungskraft gerade ein wenig.
Mit Zitat antworten
  #3  
Alt 24.10.2014, 14:08:49
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Tabelle sortieren und Werte berechnen

Zitat:
Zitat von Guenther Beitrag anzeigen
Hallo.

Lange lese ich hier schon mit und habe schon viel nützliches hier lernen können.
Offenbar zu wenig, um selber gescheit Tabellen entwerfen zu können. Normalisiere das. Jeden Monat eine neue Spalte ist einfach nur FAIL. Mit einem sauberen Design ist Dein Problem auch trivial lösbar, Dir eine Lösung für den Mist jetzt zu zeigen ist (für mich) zwar trivial, hilft Dir aber nicht, weil es Deinen Bockmist nur zementiert.
Mit Zitat antworten
  #4  
Alt 24.10.2014, 20:17:23
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Tabelle sortieren und Werte berechnen

Zitat:
Zitat von pguser Beitrag anzeigen
Offenbar zu wenig, um selber gescheit Tabellen entwerfen zu können. Normalisiere das. Jeden Monat eine neue Spalte ist einfach nur FAIL. Mit einem sauberen Design ist Dein Problem auch trivial lösbar, Dir eine Lösung für den Mist jetzt zu zeigen ist (für mich) zwar trivial, hilft Dir aber nicht, weil es Deinen Bockmist nur zementiert.
Damit Du aber siehst, wie es gehen kann:

Code:
test=*# select * from guenther ;
  name   | monat | wert
---------+-------+------
 meyer   |    10 |  123
 meyer   |     9 |  234
 meyer   |     8 |  456
 schulz  |    10 |  456
 schulz  |     9 |  123
 schulz  |     8 |  234
 mueller |    10 |  234
 mueller |     9 |  456
 mueller |     8 |  123
(9 rows)

Time: 0,240 ms
test=*# select name, okt, rank() over (order by okt desc), sep, rank() over (order by sep desc), aug, rank() over (order by aug desc) from (select name, sum(case when monat=10 then wert else 0 end) as okt, sum(case when monat=9 then wert else 0 end) as sep, sum(case when monat=8 then wert else 0 end) as aug from guenther group by name) foo order by name;
  name   | okt | rank | sep | rank | aug | rank
---------+-----+------+-----+------+-----+------
 meyer   | 123 |    3 | 234 |    2 | 456 |    1
 mueller | 234 |    2 | 456 |    1 | 123 |    3
 schulz  | 456 |    1 | 123 |    3 | 234 |    2
(3 rows)
Das Datum (Monat) so zu speichern ist auch nicht so dolle, aber egal erst einmal. Besser wäre es ein korrektes Datum zu speichern, und sei es immer der erste des Monats. Aus Zeilen dann Spalten zu machen geht so, wie ich es mit den case...when - Konstrukt und der Aggregation mache - habe ich in diversen Foren schon oft gezeigt. Das Ranking zu berechnen ist Standard-SQL, sofern man eine DB hat, die Standards kennt.

Ohne das rumgemache wegen dem Zeilen -> Spalten sähe es übrigens ganz entspannt so aus:

Code:
test=*# select name, monat, wert, rank() over (partition by monat order by wert desc) from guenther ;
  name   | monat | wert | rank
---------+-------+------+------
 meyer   |     8 |  456 |    1
 schulz  |     8 |  234 |    2
 mueller |     8 |  123 |    3
 mueller |     9 |  456 |    1
 meyer   |     9 |  234 |    2
 schulz  |     9 |  123 |    3
 schulz  |    10 |  456 |    1
 mueller |    10 |  234 |    2
 meyer   |    10 |  123 |    3
(9 rows)
Enthält dieselben Informationen.
Mit Zitat antworten
  #5  
Alt 25.10.2014, 00:43:23
Guenther Guenther ist offline
Anfänger
 
Registriert seit: Oct 2014
Alter: 61
Beiträge: 3
AW: Tabelle sortieren und Werte berechnen

Zitat:
Zitat von pguser Beitrag anzeigen
Offenbar zu wenig, um selber gescheit Tabellen entwerfen zu können. Normalisiere das. Jeden Monat eine neue Spalte ist einfach nur FAIL. Mit einem sauberen Design ist Dein Problem auch trivial lösbar, Dir eine Lösung für den Mist jetzt zu zeigen ist (für mich) zwar trivial, hilft Dir aber nicht, weil es Deinen Bockmist nur zementiert.
Ich nehme Deine Antwort als konstruktive Kritik an. Du hast ja Recht, diese Tabelle ist absolut murks. Hätte ich das entworfen, hätte ich es auch als Fortschreibung gemacht und nicht so einen Mist. Aber die Tabelle ist nur eine von vielen, die bereits da sind und ich hatte gedacht, das ich da irgendwie ansetzen kann.

Okay, ich werde also doch den Weg gehen müssen und erst mal die Werte aus der mistigen Tabelle in eine ordentliche zu überführen um damit dann vernünftig weiter zu arbeiten.

Ich Danke Dir auf jeden Fall für die Mühe, die Du Dir gemacht hast.

Lg
Günther
Mit Zitat antworten
  #6  
Alt 25.10.2014, 16:24:23
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Tabelle sortieren und Werte berechnen

Du solltest bei der Gelegenheit auch prüfen, ob Du bei MySQL bleiben willst. So Schmankerl wie Ranking-Funktionen kann es nicht, auch viele andere Dinge nicht.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Werte aus einer Tabelle von einer anderen Webseite auslesen? FRAD PHP Grundlagen 11 21.02.2012 23:06:29
Zwei Werte aus erster Tabelle mit ein Wert aus zweiter Tabelle (LEFT JOIN) verknüpfen horn-consulting MySQLi/PDO/(MySQL) 2 18.11.2011 14:32:40
Werte aller Einträge der Tabelle ändern Wiesel82 MySQLi/PDO/(MySQL) 9 05.02.2010 13:36:38
Daten nach Spalteninhalte aus anderer Tabelle sortieren paedda MySQLi/PDO/(MySQL) 2 14.05.2009 15:46:15
SQL-Result Tabelle sortieren StefanGe PHP Grundlagen 1 10.11.2003 01:17:35


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:46:51 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt