Hallo
Danke für die Hilfe.
Wie kann ich die Abfrage mit _einem_ Query erledigen, und alle Daten, egal, ob von registrierten oder nicht registrierten Benutzern, erhalten?
Ich denke, das müsstest Du mit einem LEFT- oder RIGHT-Join hinbekommen (je nachdem, wie herum du es macht). Der INNER/EQUI-Join, den Du benutzt, liefert nur die Datensätze, die in BEIDEN Tabellen vorkommen (Beiträge von registrierten Benutzern), wenn Du hingegen z.b. die Registrierungstabelle über einen LEFT JOIN mit der Beitragstabelle verknüpfst, bekommst Du auch die Beiträge, die keinen registrierten Benutzer haben (die entsprechenden Felder sind dann null) - ohne Gewähr :).
Mit einem LEFT JOIN klappt das ganz wunderbar.
Wer (weiter unten weiter)lesen kann ist klar im Vorteil. Den Artikel hatte ich nämlich schon offen. *grmpf*
Ist es zudem möglich, dass Daten aus der Tabelle Benutzer die analogen Felder aus der Tabelle >Beiträge überschreiben, falls sie in der Tabelle Benutzer vorhanden sind? Ich möchte auf die >Art vermeiden, im Ergebnis nach "name und "uname" bzw. "email" und "uemail" unterscheiden zu >müssen.
Nicht im SQL-Standard, über die Ablaufsteuerungsfunktionen in MySQL müsste es aber gehen.
Da im Gegensatz zum von mir vorgestellten Szenario bei einigen Einträgen der Benutzername und die Email eines registrierten Benutzers sehr wohl in der Tabelle Beitraege drinstehen [1], damit also in beiden Tabellen vorhanden sind, fallen dedlfixs Angebote IFNULL und COALESCE weg, da sie eines der beiden Felder als leer (bzw. NULL) erfordern. Mit der Funktion CASE aus der Ablaufsteuerung funktioniert das.
Der fertige Query:
SELECT
t1.id,
t1.user_id,
CASE WHEN t1.user_id > 0 THEN t2.name ELSE t1.name END AS name,
CASE WHEN t1.user_id > 0 THEN t2.email ELSE t1.email END AS email
FROM Beitraege AS t1 LEFT JOIN Benutzer AS t2
ON t2.id = t1.user_id
WHERE t1.email_notify = 1
[1] Ich hatte im Eröffnungsposting behauptet, bei registrierten Benutzern wären die betreffenden Felder definitiv leer.
Tschö, Auge
Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
Terry Pratchett, "Wachen! Wachen!"
ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
Veranstaltungsdatenbank Vdb 0.3