schneerunzel
Goto Top

Auswertungen Zeitnahme

Hallo zusammen,

für eine Sportveranstaltung habe ich eine Zeitnahmesoftware. Diese Software besteht so und soll auch so bleiben. Ich möchte mir jetzt aber die Ergebnisse aus der MySQL Datenbank raushohlen und den Teilnehmern zur Verfügung stellen. Leider habe ich keine Idee, wie ich die Abfrage gestallten muss.

Der Aufbau sieht wie folgt aus:

tb_messpunkte:
unbenannt

tb_messungen:

2
So sieht es in der Datenbank (vereinfacht) aus.

Ich Frage mich jetzt, wie ich die Abfrage gestalten muss um eine Liste mit dem Aufbau:
3

Ich weiß aber nicht, wie viele Messpunkte es gibt. Die Anzahl der Spalten, sollte sich also nach dem Inhalt der tb_messpunkte richten.

Ich habe leider auch keine Idee, wie das heißt bzw wie ich das nennen soll. Sonst hätte ich versucht zu Googlen. Das was ich gefunden habe, war wenig hilfreich....

Danke für Eure Hilfe

(Ich habe leider nur ein begrenztes Wissen über SQL)

Content-ID: 333875

Url: https://administrator.de/contentid/333875

Ausgedruckt am: 26.11.2024 um 21:11 Uhr

Nintox
Nintox 01.04.2017 aktualisiert um 22:56:11 Uhr
Goto Top
Hallo, hier wäre für uns hilfreich, wie deine Datenbank aufgebaut ist.
Das heißt, in welcher Beziehung stehen die Tabellen untereinander.

Grob gesagt, JOINS helfen dir dabei. Falls du dich soweit schon in SQL auskennst, bräuchte ich echt etwas genauere Infos zur Datenbankstruktur. Am besten ein ERM.
Ansonsten wäre das hier vielleicht hilfreich:
https://www.w3schools.com/sql/sql_join.asp

Eine sehr gute Seite um tiefer in SQL einzusteigen und es mit Praxisbeispielen bzw. eigener Testmöglichkeiten besser zu verstehen.
schneerunzel
schneerunzel 02.04.2017 um 12:08:01 Uhr
Goto Top
Hi,

das mit dem Join raffe ich in dem Zusammenhang nicht wirklich.....

hier einmal das ERM
unbenannt
Interessant ist in dem Zusammenhang sowieso nur die rechte Seite.

Die Verknüpfung zwischen den Startnummern gibt es bewusst nicht, da es bei anderen Veranstaltungen auch sein kann, das in der Tabelle mit den Messungen auch Chipcodes eingetragen werden. Bzw. das bei Tippfehlern dieses auch gespeichert werden sollen. Daher da keine Beziehung zwischen den Tabellen.

Wie gesagt, ich weiß eigentlich vorher nicht wie viele Messpunkte ich eigentlich habe....Daher müsste die Spalten mit den Ergebnissen variabel aufgebaut sein. Es kann sein, das in der Tabelle mit den Messpunkten nur ein Eintrag steht es können aber auch genau so gut 3 oder 5 drin stehen....
Nintox
Nintox 02.04.2017 um 13:04:22 Uhr
Goto Top
Wo ist denn die Eigenschaft "code" im ERM definiert.
Bzw. du möchtest jetzt einem bestimmten Teilnehmer die einzelnen Zeitwerte ausgeben, verstehe ich das richtig?

In der Art: Teilnehmer XY hat Schwimmzeit XY hat Laufzeit XY

Um JOINS zu nutzen, müsste man nun zwischen den Tabellen eine oder mehrere eindeutige IDs festlegen können.

Z.B Wert bei dem Wettkampf ID = teilnehmerID

Ansonsten wird es schwer, das gewünschte Ergebnis zu erzielen.
Deswegen ist es immer wichtig, das Datenbank-Design gut zu planen. Nachträglich was einzubauen, gestaltet sich da nicht mehr so einfach.
schneerunzel
schneerunzel 02.04.2017 um 15:40:35 Uhr
Goto Top
Ein meinem Beispiel stand code für Startnummer. Entschuldigung, hätte ich erwähnen müssen.

Ja genau. In den der Tabelle messpunkte steht drin, an welchen Punkten gemessen werden. (Schwimmen, Rad, Laufen, Ziel, etc. wie gesagt ich kenne die Anzahl der Messpunkte eigentlich vor der Abfrage nicht).

in der Tabelle messungen steht dann drin, welcher Messpunkt welche Startnummer wann gemessen hat. Wobei zwischen der ID in messpunkte und messpunkt in messungen eine 1:n Beziehung besteht. Eine Beziehung zwischen der Startnummer in messungen und der Tabelle teilnehmer besteht nicht.
em-pie
Lösung em-pie 02.04.2017, aktualisiert am 03.04.2017 um 09:31:59 Uhr
Goto Top
Moin,

so wie es aussieht, musst du die Tabelle tb_messungen mehrfach joinen.

Folgendes ungetestet:
select 
 a.code as "Code"  
 , a.zeit as "Schwimmen"  
 , b.zeit as "Laufen"  
 , c.zeit as "as Ziel"  
from
 tb_messungen as a
left join tb_messungen as b on a.code = b.code an b.messpunkt=2
left join tb_messungen as c on a.code = b.code an c.messpunkt=3
where 
  a.messpunkt=1

Durch das left join werden auch die Werte angezeigt, die in den Messpunkten 2 und/oder 3 noch keine Zeiten enthalten.
Allerdings wird dort dann NULL angezeigt, mit dem SQL-Statement CASE IF NULL kann man das abfangen


Nachtrag: Ich lese gerade, dass die Zahl der Messpunkte unbekannt/ variable ist. Vermutlich hilft dir dann dieser Link: http://stackoverflow.com/questions/26329159/convert-row-data-to-column- ...


Gruß
em-pie
schneerunzel
schneerunzel 03.04.2017 aktualisiert um 18:14:28 Uhr
Goto Top
Vielen Dank für den Tipp. Der Link ist sehr interessant und ich werde mir den mal ansehen. Sieht aber schon gut aus.

Ich habe für mich das Problem erst einmal selber über eine "Krücke" gelöst: Da sowieso die Daten für die Datenbank durch Python Prozesse bedient werden, kommt es auf einen Prozess mehr auch nicht an, der alle Stunde guckt, ob sich die Messpunkte verändert haben und entsprechend eine View aufbaut bzw Anpasst.

Ja ist unschön, erfüllt aber seinen Zweck ;)

Aber Vielen Dank nocheinmal