Philipp Hasenfratz: @Philipp

Beitrag lesen

Halihallo Kalle

SELECT akt_adressen.nr nr, akt_adressen.name1 name, akt_adressen.plz plz, akt_adressen.ort_nr ort_nr, akt_adressen.ort ort, count(*) ct
 FROM akt_adressen
 LEFT OUTER JOIN termine
 ON (  akt_adressen.nr = termine.veranstalter_nr )
 WHERE termine.tag >= '".$tag_von."'
 AND   termine.tag <= '".$tag_bis."'
 AND   termine.loe_kz = 0
 GROUP BY plz, name

Falls es zu einem Verein kein Termin gibt, werden die Attribute des
Termins mit NULL aufgefüllt. Die Konsequenz ist, dass die WHERE-
Bedingung nicht mehr zugrifft und _deshalb_ werden diese Vereine
dennoch nicht selektiert. LEFT OUTER JOIN funktioniert aber :-)

Vielleicht unterstützt deine Datenbank eine Art

IS_NULL(termine.id)

dann könntest du etwa folgende WHERE-Klausel entwerden:

... WHERE
  IS_NULL(termine.id) OR
  (
    termine.tag >= '...' AND
    termine.tag <= '...' AND
    termine.loe_kz = 0
  )

sprich: Entweder der Verein hat gar keinen Termin _oder_ er erfüllt
alle genannten "Termin-Eigenschaften".

Das war also nicht die Lösung.

Ich bringe dir nur Vorschläge. In die Lösung umsetzen, musst du schon
selber.

Hast du noch einen Tipp?

War der mit LEFT OUTER JOIN denn nicht gut?

Viele Grüsse

Philipp