mysql abfrage mit ausschluss von daten zwischen 2 anderen daten

max@hismac

max@hismac

Aktives Mitglied
Thread Starter
Dabei seit
05.03.2004
Beiträge
1.797
Reaktionspunkte
158
moin,

ich habe zwei tabellen, eine mit namen und andere mit zeiten. beide haben einen eindeutigen schlüssel für jede zeile, die einem namen verschiedene zeiten zuordnet. jetzt habe ich die zeiten jeweils als anfang und ende in unix zeit gespeichert.

nun möchte ich eine anfrage nach namen und daten, die nicht in einen der oben erwähnten zeiträume fallen. wichtig ist dabei, dass ein name gar nicht ausgeworfen wird, wenn der suchzeitpunkt in einen hinterlegten zeitraum fällt. ich dachte, ich könnte mit (time NOT BETWEEN "anfang" AND "ende") arbeiten. das problem ist nur, dass es mehrere zeiträume geben kann und der gesuchte zeitpunkt zwar in einen fällt, aber nicht in andere und somit die entsprechenden namen kommen, obwohl der zeitpunkt eigentilch nicht verfügbar ist.

ist jetzt alles etwas kompliziert, aber hoffentlich dennoch verständlich. meine frage ist also, wie ich das problem am besten angehe.

gruß
 
gut, falls es mal wer findet, man kann mit AND NOT EXISTS eine zweite anfrage anhängen, die treffer im zeitraum ausschließt. das löst die geschichte.
 
Ich bin mir nicht sicher, ob ich es richtig verstanden habe, aber das müsste sich auch ohne zweite Abfrage lösen lassen. Du nimmst als Basis die Zeittabelle und suchst alle Einträge, die nicht in dem gewählten Zeitraum liegen. Über einen Left Join lässt du dir die Namen der gefunden Zeiten geben und gruppierst nach diesem Namen, damit die Namen auch nur einzeln auftauchen.

So in etwa:

SELECT n.name
FROM zeiten z
LEFT JOIN namen n ON n.id = z.name_id
WHERE (z.anfang < ZEIT_START AND z.ende > ZEIT_ENDE)
GROUP BY n.name;

Ungetestet, aber müsste eigentlich gehen.

Viele Grüße
Martin
 
Zurück
Oben Unten