Tanzschulen Datenbank - aktuellen Mitgliedsvertrag ausgeben
Hallo,
ich habe eine Datenbank für eine Tanzschule erstellt.
Dort habe ich eine Tabelle in der alle Mitglieder eingetragen sind mit persönlichen Daten.
Tabelle "Mitglieder"
ID | Name | Vorname | Geburtsdatum | Kontaktdaten | Eintrittsdatum
Eine weitere Tabelle "Vertrag" beinhaltet die Vertragsdaten der jeweiligen Mitglieder. Jeder Vertrag hat ein "Anfangsdatum", also ab wann dieser Vertrag gilt, da jedes Mitglied mehrere Verträge haben kann (je nach dem welche Kurse und wie viele Kurse gelegt werden muss nämlich ein anderer Beitrag gezahlt werden).
Tabelle "Vertrag"
Vertrag_ID | Mitglied | Beitrag | AnfangsDatum
Dann gibt es noch eine Tabelle "verkn_mitgl_kurs". Wie der Name schon sagt ist dort festgehalten welche Kurse jedes Mitglied belegt. Zusätzlich ist noch eine Vertragsnummer notiert, dass man nach vollziehen kann, wann, welches Mitglied, welche Kurse belegt hat und somit welchen Beitrag zu bezahlen hat.
Tabelle "verkn_mitgl_kurs"
Mitglied | Kurs | Vertrag
(alles Fremdschlüssel)
Jetzt hab ich zwei Probleme.
Das erst: Ich möchte in einer Mitglieder Übersicht eine Tabelle ausgeben lassen, in der man den Namen des Mitglieds sieht, den aktuellen Beitrag und die aktuell belegten Kurse.
Doch das mit dem aktuell funktioniert nicht richtig.
Das ist meine Abfrage:
SELECT
m.Name, m.Vorname,m.ID, Vertrag.*
FROM
Mitglieder m
LEFT JOIN ( SELECT v1.*
FROM Vertrag as v1
LEFT JOIN Vertrag AS v2
ON v1.Vertrag_ID = v2.Vertrag_ID AND v1.AnfangsDatum < v2.AnfangsDatum
WHERE v2.Mitglied IS NULL ) as Vertrag
ON (m.ID = Vertrag.Mitglied)
GROUP BY m.ID ORDER BY Name, Vorname ASC
Das funktioniert leider nicht ganz. Bei einigen Mitgliedern wird nicht der richtig Beitrag angezeigt. Ich nehme an, dass die Abfrage nach dem aktuellsten Vertrag nicht richtig ist.
Mein 2. Problem:
Ich möchte Anwesenheitslisten erstellen. Das heißt für jeden Kurs eine Liste mit allen Mitglieder, die aktuell diesen Kurs besuchen.
Mit meiner Abfrage tauchen Mitglieder allerdings auch auf Kurslisten auf die Sie früher mal belegt haben:
SELECT
m.Name, m.Vorname,m.ID, Vertrag.*
FROM
Mitglieder m
LEFT JOIN ( SELECT v1.*
FROM Vertrag as v1
LEFT JOIN Vertrag AS v2
ON v1.Vertrag_ID = v2.Vertrag_ID AND v1.AnfangsDatum > v2.AnfangsDatum
WHERE v2.Mitglied IS NULL ) as Vertrag
ON (m.ID = Vertrag.Mitglied)
LEFT JOIN verkn_mitgl_kurs as verkn ON verkn.Vertrag = Vertrag.Vertrag_ID
WHERE verkn.Kurs = '".$KursID."'
GROUP BY m.ID
ORDER BY m.Name, m.Vorname ASC
Jemand eine Idee ?