Hallo Zusammen,
vielleicht kann mir jemand von euch bei meinem aktuellen Problem helfen!? Die Frage wurde vor 4 Jahren schonmal gepostet, allerdings ohne Ergebnis...
Es geht um eine SQL-Datenbank mit mehreren Tabellen, bezüglich meines Problems sind allerdings nur zwei Tabellen betroffen. Aus diesem Grund werde ich auch nur diese Tabellen ansprechen. Der Vollständigkeit wegen erwähne ich noch die Tabelle Kunde, da diese in Zusammenhang mit der Tabelle Newsletter steht.
Es existiert folgende Fragestellung/Problem:
In der Tabelle „Anzeigen“ soll geprüft werden ob eine Anzeige im Feld „aktuell“ auf „0“ bzw. „1“ steht, also ob die Anzeige noch aktuell ist oder nicht.
Wenn die Anzeige bereits ABGELAUFEN ist, also auf „0“ steht soll folgender Schritt unternommen werden:
In der Tabelle „Newsletter_Versand“ soll gezählt werden, wie oft eine bestimmte „ID“ aus der Tabelle „Anzeigen“ eingetragen ist, die nicht mehr aktuell ist.
Dieser Wert soll dann an den entsprechenden Datensatz in der Tabelle „Anzeigen“ in das Feld „Newsletter_Kunde“ übergeben werden, sodass man sehen kann wie oft eine bereits abgelaufene Anzeige versendet wurde.
Ist bei „Newsletter_an_Kunde“ aber bereits ein höherer Wert als ‚0‘ eingetragen, also ist die Anzeige zuvor schon mehrfach versendet worden, sollen sich die beiden Werte summieren und dann das entsprechende Feld aktualisieren.
Tabellenstruktur:
Tabelle 1 (Anzeigen):
• Bezeichnung: Anzeigen
• Diese Tabelle enthält die Stellenanzeigen.
• Die zwei relevanten Felder sind „aktuell“ und „Newsletter_an_Kunde“
• aktuell: Boolscher Wert (Ja/Nein): 0 = offline (Wird nicht mehr angezeigt in Suche) / -1 = online (wird angezeigt in Suche)
• Newsletter_Kunde: (Integer): Enthält die Summe der verschickten Job_Finder, also die Gesamtanzahl der UNTERSCHIEDLICHEN Adressdaten.
Felder:
• ID (Primärschlüssel)
• aktuell
• Aufnahmedatum
• Newsletter_an_Kunde
• Name
• Ansprechpartner
• Abteilung
• Usw.
Tabelle 2 (Newsletter_Versand):
• Bezeichnung: Newsletter_Versand
• Diese Tabelle stellt eine komplex/komplexe Beziehung da und muss daher als eigenständige Tabelle erzeugt werden. Diese Tabelle wird herangezogen, wenn Newsletter verschickt werden.
• IdAnzeigen: Dieses Feld hat die entsprechenden Werte aus dem Feld ID aus der Tabelle „Anzeigen“
• idKunde: Dieses Feld hat die entsprechenden Werte aus dem Feld ID aus der Tabelle „Kunde“
• Der Sinn dieser Beziehungstabelle ist es zu sehen, welche Stellenanzeigen an bestimmte Bewerber bereits verschickt wurden und ermöglicht so eine Zählung (Summenberechnung).
Felder:
• Id (Primärschlüssel)
• idAnzeigen (Fremdschlüssel auf Tabelle: Anzeigen)
• idKunde (Fremdschlüssel auf Tabelle: Kunde)
Tabelle 3 (Kunde):
• Bezeichnung: Kunde
• Die Tabelle Kunde enthält die Datensätze zu den einzelnen Kunden.
Felder:
• ID (Primärschlüssel)
• Name
• Vorname
• Abteilung
• Strasse
• PLZ/Ort
• Telefon
• Usw.
------------------------------------------------------------------------------------------------------------
Um mir die entsprechenden Werte in einer, zur Ansicht erzeugten, Spalte ausgeben zu lassen habe ich folgende zwei Abfragen erstellt:
Abfrage A mit INNER JOIN:
[highlight=sql]
SELECT Anzeigen.ID, COUNT(Anzeigen.ID) AS NEWSLETTER
FROM Anzeigen
INNER JOIN Newsletter_Versand
ON (Anzeigen.ID=Newsletter_Versand.idAnzeigen)
WHERE Anzeigen.aktuell=0
GROUP BY Anzeigen.ID
ORDER BY Anzeigen.ID;
[/highlight]
Abfrage B mit LEFT JOIN:
[highlight=sql]
SELECT Anzeigen.ID, COUNT(Newsletter_Versand.idAnzeigen) AS NEWSLETTER
FROM id_jobfinder_angebote
LEFT JOIN Anzeigen
ON (Newsletter_Versand.idAnzeigen=Anzeige.ID)
WHERE Anzeigen.aktuell=0
GROUP BY Newsletter_Versand.idAnzeigen
ORDER BY Newsletter_Versand.idAnzeigen;
[/highlight]
Daraus habe ich versucht eine Update-Funktion zu erstellen, die auch tatsächlich die entsprechenden Werte ersetzt, leider aber auch einfach die alten Werte bei Anzeigen/Newsletter_an_Kunde überschrieben hat.
Und eigentlich war es auch mehr Zufall, dass die Abfrage die richtigen Rows erwischt hat.
Wie kann ich aus diesen Abfragen eine Funktion machen?
[highlight=sql]UPDATE ...... SET ...... = [/highlight]
Bitte um Hilfe, steh jetzt echt vor der Wand....
Sorry für den langen Text, aber ich dachte, dass es ausführlicher vielleicht leichter verständlich ist....
vielleicht kann mir jemand von euch bei meinem aktuellen Problem helfen!? Die Frage wurde vor 4 Jahren schonmal gepostet, allerdings ohne Ergebnis...
Es geht um eine SQL-Datenbank mit mehreren Tabellen, bezüglich meines Problems sind allerdings nur zwei Tabellen betroffen. Aus diesem Grund werde ich auch nur diese Tabellen ansprechen. Der Vollständigkeit wegen erwähne ich noch die Tabelle Kunde, da diese in Zusammenhang mit der Tabelle Newsletter steht.
Es existiert folgende Fragestellung/Problem:
In der Tabelle „Anzeigen“ soll geprüft werden ob eine Anzeige im Feld „aktuell“ auf „0“ bzw. „1“ steht, also ob die Anzeige noch aktuell ist oder nicht.
Wenn die Anzeige bereits ABGELAUFEN ist, also auf „0“ steht soll folgender Schritt unternommen werden:
In der Tabelle „Newsletter_Versand“ soll gezählt werden, wie oft eine bestimmte „ID“ aus der Tabelle „Anzeigen“ eingetragen ist, die nicht mehr aktuell ist.
Dieser Wert soll dann an den entsprechenden Datensatz in der Tabelle „Anzeigen“ in das Feld „Newsletter_Kunde“ übergeben werden, sodass man sehen kann wie oft eine bereits abgelaufene Anzeige versendet wurde.
Ist bei „Newsletter_an_Kunde“ aber bereits ein höherer Wert als ‚0‘ eingetragen, also ist die Anzeige zuvor schon mehrfach versendet worden, sollen sich die beiden Werte summieren und dann das entsprechende Feld aktualisieren.
Tabellenstruktur:
Tabelle 1 (Anzeigen):
• Bezeichnung: Anzeigen
• Diese Tabelle enthält die Stellenanzeigen.
• Die zwei relevanten Felder sind „aktuell“ und „Newsletter_an_Kunde“
• aktuell: Boolscher Wert (Ja/Nein): 0 = offline (Wird nicht mehr angezeigt in Suche) / -1 = online (wird angezeigt in Suche)
• Newsletter_Kunde: (Integer): Enthält die Summe der verschickten Job_Finder, also die Gesamtanzahl der UNTERSCHIEDLICHEN Adressdaten.
Felder:
• ID (Primärschlüssel)
• aktuell
• Aufnahmedatum
• Newsletter_an_Kunde
• Name
• Ansprechpartner
• Abteilung
• Usw.
Tabelle 2 (Newsletter_Versand):
• Bezeichnung: Newsletter_Versand
• Diese Tabelle stellt eine komplex/komplexe Beziehung da und muss daher als eigenständige Tabelle erzeugt werden. Diese Tabelle wird herangezogen, wenn Newsletter verschickt werden.
• IdAnzeigen: Dieses Feld hat die entsprechenden Werte aus dem Feld ID aus der Tabelle „Anzeigen“
• idKunde: Dieses Feld hat die entsprechenden Werte aus dem Feld ID aus der Tabelle „Kunde“
• Der Sinn dieser Beziehungstabelle ist es zu sehen, welche Stellenanzeigen an bestimmte Bewerber bereits verschickt wurden und ermöglicht so eine Zählung (Summenberechnung).
Felder:
• Id (Primärschlüssel)
• idAnzeigen (Fremdschlüssel auf Tabelle: Anzeigen)
• idKunde (Fremdschlüssel auf Tabelle: Kunde)
Tabelle 3 (Kunde):
• Bezeichnung: Kunde
• Die Tabelle Kunde enthält die Datensätze zu den einzelnen Kunden.
Felder:
• ID (Primärschlüssel)
• Name
• Vorname
• Abteilung
• Strasse
• PLZ/Ort
• Telefon
• Usw.
------------------------------------------------------------------------------------------------------------
Um mir die entsprechenden Werte in einer, zur Ansicht erzeugten, Spalte ausgeben zu lassen habe ich folgende zwei Abfragen erstellt:
Abfrage A mit INNER JOIN:
[highlight=sql]
SELECT Anzeigen.ID, COUNT(Anzeigen.ID) AS NEWSLETTER
FROM Anzeigen
INNER JOIN Newsletter_Versand
ON (Anzeigen.ID=Newsletter_Versand.idAnzeigen)
WHERE Anzeigen.aktuell=0
GROUP BY Anzeigen.ID
ORDER BY Anzeigen.ID;
[/highlight]
Abfrage B mit LEFT JOIN:
[highlight=sql]
SELECT Anzeigen.ID, COUNT(Newsletter_Versand.idAnzeigen) AS NEWSLETTER
FROM id_jobfinder_angebote
LEFT JOIN Anzeigen
ON (Newsletter_Versand.idAnzeigen=Anzeige.ID)
WHERE Anzeigen.aktuell=0
GROUP BY Newsletter_Versand.idAnzeigen
ORDER BY Newsletter_Versand.idAnzeigen;
[/highlight]
Daraus habe ich versucht eine Update-Funktion zu erstellen, die auch tatsächlich die entsprechenden Werte ersetzt, leider aber auch einfach die alten Werte bei Anzeigen/Newsletter_an_Kunde überschrieben hat.
Und eigentlich war es auch mehr Zufall, dass die Abfrage die richtigen Rows erwischt hat.
Wie kann ich aus diesen Abfragen eine Funktion machen?
[highlight=sql]UPDATE ...... SET ...... = [/highlight]
Bitte um Hilfe, steh jetzt echt vor der Wand....
Sorry für den langen Text, aber ich dachte, dass es ausführlicher vielleicht leichter verständlich ist....
Comment