Abfrage Datensätz die nicht vorhanden sind....

el_espiritu

Mitglied
Also ist etwas problematisch zu erklären, aber ich versuchs mal:

Habe eine Datenbank in der nur Ausfallzeiten von Servern gespeichert werden. Es gibt 5 verschiedene Sever die täglich zu verschiedenen zeiten Ausfälle haben können.
Also die Ausgabe sieht momentan so aus, das die Ausfallzeiten von den Servern angezeigt werden, z.B. der letzten 24 Stunden.
Z.B. Server 1, Server 3, und Server 1 zu einer anderen Zeit.
Jetzt soll automatisch für die anderen Server auf der Webseite angezeigt werden, das eben bei diesen kein Ausfall da war in den letzten 24 Stunden. Wie das aussieht ist eigentlich egal, wichtig ist nur, wie man die Abfrage daraufhin erstellt, das immer von den Servern, die nicht in der Datenbank als Ausfall stehen, eine andere Anzeige auf der Webseite erstellt wird.

Ich weiß das ist schwierig zu erklären, aber ich hoffe es kommt einigermaßen rüber was für ein Problem ich habe.
Problematisch ist halt, das z.B. am nächsten Tag ja wiederrum andere Server ausfallen können und demnach andere Server keinen Ausfall hatten. Diese müssen dann wieder wie oben beschrieben eine andere Ausgabe auf der Webseite bekommen.
 
hmm, also wenn noch ne Tabelle besteht, die alle Server beinhaltet kannst du das so lösen: (auszug aus der MySQL-Hilfe): Wenn es für die rechte Tabelle keinen übereinstimmenden Datensatz im ON- oder USING-Teil eines LEFT JOIN gibt, wird für die rechte Tabelle eine Zeile benutzt, in der alle Spalten auf NULL gesetzt sind. Das können Sie benutzen, um Datensätze in einer Tabelle herauszusuchen, die in einer anderen Tabelle kein Gegenstück haben:
Code:
mysql> select tabelle1.* from tabelle1
           LEFT JOIN tabelle2 ON tabelle1.id=tabelle2.id
           where tabelle2.id is NULL;

Dieses Beispiel findet alle Zeilen in tabelle1 mit einem id-Wert, der in tabelle2 nicht vorhanden ist (also alle Zeilen in tabelle1 ohne entsprechende Zeile in tabelle2). Hierbei wird natürlich angenommen, dass tabelle2.id als NOT NULL deklariert ist.
 
Also ich hab das jetzt mal so in MySQLFront ausprobiert:

PHP:
select tagesstatus.* from tagesstatus
           LEFT JOIN server ON tagesstatus.server_id=server.server_id
           where server.server_id is NULL;
"tagesstatus" ist die Tabelle mit allen Datensätzen, dort gibt es die "server_id".
In einer weiteren Tabelle gibt es diese "server_id" als Primärschlüssel Not Null in der Tabelle "server", in der dann auch die Zuweisung der id an den Servernamen erfolgt.
Wenn ich den Code ausführe, bekomme ich einen leeren Datensatz angezeigt, also nichts. :(
In einem anderen Forum hat mir jemand diesen Code empfohlen:
PHP:
SELECT 
  S.*, az.server_id, IF(ISNULL(az.tag_stoerstart_datum),'nicht ausgefallen', az.tag_stoerstart_datum)
FROM
  server S
  LEFT OUTER JOIN tagesstatus az USING (server_id)
WHERE
  az.server_id IS NULL
  OR
  az.tag_stoerstart_datum>=NOW() - INTERVAL 1 DAY;
Das funktioniert schon mal ganz gut, aber er zeigt nicht alle Server an, die keinen Ausfall haben. Er lässt z.B. Server 1 und 5 von 6 insgesamt weg, obwohl die auch keinen Ausfall hatten.....:rolleyes:
 
Hmm....anscheinend weiß keiner sonst hier was zu diesem Thema. :rolleyes: :(
Habe nun noch einer weitere, eigentliche auch sehr logische SQL-Syntax von einem Kollegen bekommen:
PHP:
SELECT ser_name FROM server WHERE server_id NOT IN
(SELECT server_id FROM tagesstatus WHERE 
tag_stoerstart_datum >= DATE_SUB(NOW(), INTERVAL 24
HOUR) AND tag_stoerstart_zeit >= now() );
Das ist soweit ja schonmal klar denke ich, aber ich bekomme eine fehlermeldung von MySQL:
You have an error in your SQL syntax. Check the manual that corresponds
to your MySQL server version for the right syntax to use near 'SELECT
server_id FROM tagesstatus WHERE tag_stoerstart_datum >=

Wo liegt denn bitteschön in der Syntax der Fehler :confused:
 

Neue Beiträge

Zurück