Salvatore R.
Neuer Benutzer
- Beiträge
- 3
Hallo Liebe Mitglieder,
Seit mehreren Wochen beschäftige ich mich schon mit einem Problem an einem Modul meiner Applikation und komme einfach nicht ans Ziel und brauche Hilfe.
Erst mal zu der Aufgabenstellung.
Ich erteile wiederkehrende Kurse mit N Kursprodukten, zB. Januar Malen 1, Januar Malen 2, Januar Kochen 1 usw. Im Jeweiligen Kontaktprofil selektiere ich jeweils die möglichen Kurse(Kursprodukte) zB. Kochen, Stricken, Malen, diese schreibe ich in eine Tabelle (Tabelle1) für mögliche Kursteilnehmer, zB. Kontakt 87 Kursprodukt 17, Kontakt 87 Kursprodukt 23 usw.
Für einen Kurszeilnehmer ist der Kurs erst abgeschlossen wenn er alle Module des ensprechenden Kurses beendet hat.
Nun zu den Kursen Tabelle Courses.
Es gibt mehrere Optionen bei den Kursen, neuen Kurs erstellen und Teilnehmer hinzufügen, bestehenden Kurs editieren und Teilnehmer hinzufügen oder entfernen, Kurs am laufen oder Kurs abgeschlossen. Um die möglichen Kurskandidaten zu sehen schaue ich in Tabelle1, schreibe dann die selektierten oder entferne die unselektierten Teilnehmer mit der jeweiligen Kursnummer in der Tabelle (CourseSubscribers) zB. Kontakt 87, Kurs 324 und gleichzeitig schreibe ich in eine Tabelle welcher Kurszeilnehmer welche Kurse besucht (Tabelle3) und deren Status des Kurses, zB. angemeldet, abgeschlossen, oder nicht abgeschlossen.
Informationen für das eigentliche Kursprodukt stehen in den Produkttabellen. Somit auch die Anzahl Module des jeweiligen Kursproduktes
Die KursModule CourseUnits (noch nicht unbedingt relevant, später jedoch schon)
Jeder Kurs hat N-Kursmodule zB. Sticken Januar 1, hat 4 Module, Stricken1, 2 usw.. Im jeweiligen Modul werden mir die eingeschriebenen Kursteilnehmer wieder angezeigt. Hier definiere ich mögliche Absenzen des Moduls und schreibe diese in eine Tabelle Absenzen (Tabelle4), Kursnummer, Kontakt, KursModul usw. Diese Informationen schreibe ich in eine weitere Tabelle5. Diese ist mit Tabelle3 verknüpft. Hat ein Kursteilnehmer alle Module dieses Kurses besucht und keine Absenzen produziert, gilt die Ausbildung als abgeschlossen, dies trage ich dann in Tabelle 3 als abgeschlossen ein, ansonsten als nicht abgeschlossen.
Ob dieser Weg der richtige ist weiss ich nicht, aber diese Struktur besteht und läuft
Nun das eigentliche Problem mit den Kurszeilnehmern.
Erstellen eines Kurses
Es müssen alle Kandidaten für dieses Kursprodukt gezeigt werden die noch keinen Kurs (Kursprodukt) besucht haben, oder Kandidaten die in anderen Kursen dieses Kursproduktes, Absenzen produziert haben, aber nur die Absenzen, die die fehlenden Module noch nicht nachgeholt haben.
Editieren eines Kurses
Es müssen alle Kandidaten gezeigt werden die für diesen Kurs Angemeldet sind, neue Kandidaten und Kandidaten die Absenzen produziert haben, aber das Kursprodukt noch nicht abgeschlossen resp. nachgeholt haben.
nach dem schliessen eines Kurses (heisst nicht, dass es für de Kursteilnehmer abgeschlossen ist)
Nur die Kandidaten die angemeldet sind/waren, egal ob sie Absenzen produziert haben oder nicht.
Ich habe schon viele Query Varianten ausprobiert, mal sehe ich keine Nachholer, mal keine Neuen, mal doppelte mal gar keine.
Ich brauche also ein Query das diese Bedürfnisse abdeckt, komme aber nicht drauf wie.
-----------------------------------------------------------------------------------
Hier mal eine Variante.
SELECT
DSFC.ContactID,
Contact,
DSFC.CourseProductID,
CS.CourseID,
C.CourseID,
C.CourseProductID,
DSC.ContactID,
DSC.ContactCourseStatus,
DSC.CourseID
FROM Tabelle1 AS DSFC
LEFT JOIN CourseSubscribers AS CS ON (DSFC.ContactID = CS.ContactID)
LEFT JOIN Courses AS C ON (DSFC.CourseProductID = C.CourseProductID) AND CS.CourseID = C.CourseID
LEFT JOIN Tabelle3 AS DSC ON (CS.ContactID = DSC.ContactID) AND CS.CourseID = DSC.CourseID
WHERE
(
CASE
WHEN DSC.CourseID = CS.CourseID THEN DSC.CourseID = '{CourseID}' ELSE
DSFC.ContactID IS NOT NULL AND (DSC.ContactCourseStatus IS NULL OR DSC.ContactCourseStatus = 2)
END
)
AND
DSFC.CourseProductID = '{CourseProductID}'
-------------------------------------------
Bei dieser Variante (was bis jetzt die Beste ist), sehe ich nach abschluss des Kurses, auch die, die noch nie angemeldet waren, jedoch bei einem neuen Kurs, die Nachholer nicht. Wenn das erledigt wäre, wäre ich schon glücklich.
Ich hoffe, ich habe das Bedürfniss einigermassen verständlich geschildert.
Über Eure Hilfe würde ich mich freuen, auch für andere Lösungswege und Vorschläge wäre ich natürlich offen.
Kommentar
'{}' sind '{Variablen}'
Bei dieser Variante fehlt das vergleichen der anzahl Module der Tabelle3 mit den defienierten anzahl Module im Kursprodukt.
Seit mehreren Wochen beschäftige ich mich schon mit einem Problem an einem Modul meiner Applikation und komme einfach nicht ans Ziel und brauche Hilfe.
Erst mal zu der Aufgabenstellung.
Ich erteile wiederkehrende Kurse mit N Kursprodukten, zB. Januar Malen 1, Januar Malen 2, Januar Kochen 1 usw. Im Jeweiligen Kontaktprofil selektiere ich jeweils die möglichen Kurse(Kursprodukte) zB. Kochen, Stricken, Malen, diese schreibe ich in eine Tabelle (Tabelle1) für mögliche Kursteilnehmer, zB. Kontakt 87 Kursprodukt 17, Kontakt 87 Kursprodukt 23 usw.
Für einen Kurszeilnehmer ist der Kurs erst abgeschlossen wenn er alle Module des ensprechenden Kurses beendet hat.
Nun zu den Kursen Tabelle Courses.
Es gibt mehrere Optionen bei den Kursen, neuen Kurs erstellen und Teilnehmer hinzufügen, bestehenden Kurs editieren und Teilnehmer hinzufügen oder entfernen, Kurs am laufen oder Kurs abgeschlossen. Um die möglichen Kurskandidaten zu sehen schaue ich in Tabelle1, schreibe dann die selektierten oder entferne die unselektierten Teilnehmer mit der jeweiligen Kursnummer in der Tabelle (CourseSubscribers) zB. Kontakt 87, Kurs 324 und gleichzeitig schreibe ich in eine Tabelle welcher Kurszeilnehmer welche Kurse besucht (Tabelle3) und deren Status des Kurses, zB. angemeldet, abgeschlossen, oder nicht abgeschlossen.
Informationen für das eigentliche Kursprodukt stehen in den Produkttabellen. Somit auch die Anzahl Module des jeweiligen Kursproduktes
Die KursModule CourseUnits (noch nicht unbedingt relevant, später jedoch schon)
Jeder Kurs hat N-Kursmodule zB. Sticken Januar 1, hat 4 Module, Stricken1, 2 usw.. Im jeweiligen Modul werden mir die eingeschriebenen Kursteilnehmer wieder angezeigt. Hier definiere ich mögliche Absenzen des Moduls und schreibe diese in eine Tabelle Absenzen (Tabelle4), Kursnummer, Kontakt, KursModul usw. Diese Informationen schreibe ich in eine weitere Tabelle5. Diese ist mit Tabelle3 verknüpft. Hat ein Kursteilnehmer alle Module dieses Kurses besucht und keine Absenzen produziert, gilt die Ausbildung als abgeschlossen, dies trage ich dann in Tabelle 3 als abgeschlossen ein, ansonsten als nicht abgeschlossen.
Ob dieser Weg der richtige ist weiss ich nicht, aber diese Struktur besteht und läuft
Nun das eigentliche Problem mit den Kurszeilnehmern.
Erstellen eines Kurses
Es müssen alle Kandidaten für dieses Kursprodukt gezeigt werden die noch keinen Kurs (Kursprodukt) besucht haben, oder Kandidaten die in anderen Kursen dieses Kursproduktes, Absenzen produziert haben, aber nur die Absenzen, die die fehlenden Module noch nicht nachgeholt haben.
Editieren eines Kurses
Es müssen alle Kandidaten gezeigt werden die für diesen Kurs Angemeldet sind, neue Kandidaten und Kandidaten die Absenzen produziert haben, aber das Kursprodukt noch nicht abgeschlossen resp. nachgeholt haben.
nach dem schliessen eines Kurses (heisst nicht, dass es für de Kursteilnehmer abgeschlossen ist)
Nur die Kandidaten die angemeldet sind/waren, egal ob sie Absenzen produziert haben oder nicht.
Ich habe schon viele Query Varianten ausprobiert, mal sehe ich keine Nachholer, mal keine Neuen, mal doppelte mal gar keine.
Ich brauche also ein Query das diese Bedürfnisse abdeckt, komme aber nicht drauf wie.
-----------------------------------------------------------------------------------
Hier mal eine Variante.
SELECT
DSFC.ContactID,
Contact,
DSFC.CourseProductID,
CS.CourseID,
C.CourseID,
C.CourseProductID,
DSC.ContactID,
DSC.ContactCourseStatus,
DSC.CourseID
FROM Tabelle1 AS DSFC
LEFT JOIN CourseSubscribers AS CS ON (DSFC.ContactID = CS.ContactID)
LEFT JOIN Courses AS C ON (DSFC.CourseProductID = C.CourseProductID) AND CS.CourseID = C.CourseID
LEFT JOIN Tabelle3 AS DSC ON (CS.ContactID = DSC.ContactID) AND CS.CourseID = DSC.CourseID
WHERE
(
CASE
WHEN DSC.CourseID = CS.CourseID THEN DSC.CourseID = '{CourseID}' ELSE
DSFC.ContactID IS NOT NULL AND (DSC.ContactCourseStatus IS NULL OR DSC.ContactCourseStatus = 2)
END
)
AND
DSFC.CourseProductID = '{CourseProductID}'
-------------------------------------------
Bei dieser Variante (was bis jetzt die Beste ist), sehe ich nach abschluss des Kurses, auch die, die noch nie angemeldet waren, jedoch bei einem neuen Kurs, die Nachholer nicht. Wenn das erledigt wäre, wäre ich schon glücklich.
Ich hoffe, ich habe das Bedürfniss einigermassen verständlich geschildert.
Über Eure Hilfe würde ich mich freuen, auch für andere Lösungswege und Vorschläge wäre ich natürlich offen.
Kommentar
'{}' sind '{Variablen}'
Bei dieser Variante fehlt das vergleichen der anzahl Module der Tabelle3 mit den defienierten anzahl Module im Kursprodukt.