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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
20.10.2014, 21:07:20
|
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
|
23.10.2014, 02:05:28
|
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.
|
24.10.2014, 14:08:49
|
Junior Member
|
|
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
|
|
AW: Tabelle sortieren und Werte berechnen
Zitat:
Zitat von Guenther
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.
|
24.10.2014, 20:17:23
|
Junior Member
|
|
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
|
|
AW: Tabelle sortieren und Werte berechnen
Zitat:
Zitat von pguser
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.
|
25.10.2014, 00:43:23
|
Anfänger
|
|
Registriert seit: Oct 2014
Alter: 61
Beiträge: 3
|
|
AW: Tabelle sortieren und Werte berechnen
Zitat:
Zitat von pguser
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
|
25.10.2014, 16:24:23
|
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.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
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.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 11:46:51 Uhr.
|