php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 15-08-2003, 12:39
el_espiritu
 Junior Member
Links : Onlinestatus : el_espiritu ist offline
Registriert seit: May 2003
Beiträge: 170
el_espiritu ist zur Zeit noch ein unbeschriebenes Blatt
Standard [MySQL 4.0] Abfrage nach Datensätzen die nicht vorhanden sind

Folgendes Problem stellt sich mir gerade:
In meine Datenbank werden Ausfallzeiten von Servern gespeichert. Sagen wir mal es gibt 5 versch. Server. Wenn nun wenn in einer best. Zeitspanne kein Eintrag zu 2 Servern da ist, aber zu den andern 3? Ich gege eine Tabellenreihe in einer while-Schleife aus, in dem logischerweise dann nur die 3 Server stehen. Wie gebe ich jetzt automatisch für die 2 anderen Server andere Daten aus??
Hat da jemand eine Idee?
Mit Zitat antworten
  #2 (permalink)  
Alt 15-08-2003, 12:47
BrainBug
 PHP Senior
Links : Onlinestatus : BrainBug ist offline
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
BrainBug ist zur Zeit noch ein unbeschriebenes Blatt
Question

mir ist nicht ganz klar, was du willst.

wie soll denn deine Ausgabe aussehen?
Mit Zitat antworten
  #3 (permalink)  
Alt 15-08-2003, 12:55
el_espiritu
 Junior Member
Links : Onlinestatus : el_espiritu ist offline
Registriert seit: May 2003
Beiträge: 170
el_espiritu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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 er immer von den Servern die nicht in der Datenbank als Ausfall stehen, eine andere Anzeige auf der Webseite erstellt.

Ich weiß das ist schwierig zu erklären, aber ich hoffe jetzt wurde es deutlicher. 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.
Mit Zitat antworten
  #4 (permalink)  
Alt 15-08-2003, 21:28
Pascal P.
 Member
Links : Onlinestatus : Pascal P. ist offline
Registriert seit: Dec 2001
Ort: Pforzheim
Beiträge: 420
Pascal P. ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich weiss halt net wie deine Tabellen aussehen, aber vielleicht hilft dir das weiter. Also nehmen wir an du hast deine Server in einer Tabelle geplegt. In einer Tabelle hast du dann die Ausfallzeiten geplegt. Über eine Server ID werden die Ausfallzeiten dann dem Server zugewiesen. So stelle ich mir jetzt eine einfache Tabellenstruktur vor.

Code:
SELECT S.* FROM SERVER S
LEFT JOIN AUSFALLZEITEN AZ ON (AF.SERVER_ID = S.SERVER_ID)
WHERE AZ.SERVER_ID IS NULL and AZ.AUSFALLZEIT >= CURRENT_DATE
Versuch es mal damit. Ansonsten konnte dir die Funktion EXISTS von mysql vielleicht noch weiterhelfen.
__________________
Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info
Mit Zitat antworten
  #5 (permalink)  
Alt 18-08-2003, 08:07
BrainBug
 PHP Senior
Links : Onlinestatus : BrainBug ist offline
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
BrainBug ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wenn ich es jetzt richtig verstanden habe, kann in der Tabelle 3x Server1, 1 x Server4 für die 24 Stunden drinstehen und du willst eine Tabelle, in der eben 3x Server1 und jeweils 1x Server2-4 aufgelistet steht, wobei bei Server4 wieder eine Ausfallzeit aufgeführt ist.

Entweder du machst den Select schon so, dass du die gewünschten Zeilen erhälst (dafür brauchst du eine Tabelle, in der alle Server vermerkt sind) oder du liest den Resultset komplett in ein Array aus und bei der Ausgabe prüfst du, ob ein ServerX einen Eintrag hat oder nicht. Aber die DB-Lösung nach Pascal finde ich auf jeden Fall die sinnvollere.
Mit Zitat antworten
  #6 (permalink)  
Alt 19-08-2003, 08:32
el_espiritu
 Junior Member
Links : Onlinestatus : el_espiritu ist offline
Registriert seit: May 2003
Beiträge: 170
el_espiritu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von BrainBug
wenn ich es jetzt richtig verstanden habe, kann in der Tabelle 3x Server1, 1 x Server4 für die 24 Stunden drinstehen und du willst eine Tabelle, in der eben 3x Server1 und jeweils 1x Server2-4 aufgelistet steht, wobei bei Server4 wieder eine Ausfallzeit aufgeführt ist.
Nicht ganz, in der Tabelle für die Ausfallzeiten stehen NUR Ausfallzeiten. Wenn ein Server keinen hatte, steht dort kein Datensatz. Aber ich habe wie ihr richtig bemerkt habt eine extra Tabelle mit den Servern, in der Datensatztabelle mit den Ausfallzeiten wird jeweils nur die ID des jeweiligen Servers abgespeichert.

Zitat:
Original geschrieben von BrainBug
Entweder du machst den Select schon so, dass du die gewünschten Zeilen erhälst (dafür brauchst du eine Tabelle, in der alle Server vermerkt sind) oder du liest den Resultset komplett in ein Array aus und bei der Ausgabe prüfst du, ob ein ServerX einen Eintrag hat oder nicht. Aber die DB-Lösung nach Pascal finde ich auf jeden Fall die sinnvollere.
Ich werde beides mal versuchen, mal sehen wie ich klar komme. Bisher schonmal Danke!
Mit Zitat antworten
  #7 (permalink)  
Alt 19-08-2003, 08:44
el_espiritu
 Junior Member
Links : Onlinestatus : el_espiritu ist offline
Registriert seit: May 2003
Beiträge: 170
el_espiritu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Pascal P.
Ich weiss halt net wie deine Tabellen aussehen, aber vielleicht hilft dir das weiter. Also nehmen wir an du hast deine Server in einer Tabelle geplegt. In einer Tabelle hast du dann die Ausfallzeiten geplegt. Über eine Server ID werden die Ausfallzeiten dann dem Server zugewiesen. So stelle ich mir jetzt eine einfache Tabellenstruktur vor.

Code:
SELECT S.* FROM SERVER S
LEFT JOIN AUSFALLZEITEN AZ ON (AF.SERVER_ID = S.SERVER_ID)
WHERE AZ.SERVER_ID IS NULL and AZ.AUSFALLZEIT >= CURRENT_DATE
Versuch es mal damit. Ansonsten konnte dir die Funktion EXISTS von mysql vielleicht noch weiterhelfen.
Könnte mir jemand mal die Funktion von pascal erklären:
Meine Tabelle für die Ausfallzeit heißt "tagesstatus", dort gibt es als Fremdschlüssel die "server_id". Diese wiederrum gibt es als Primärschlüssel in der Tabelle "server". Wo muss ich in der obigen syntax jetzt was einsetzen??
Mit Zitat antworten
  #8 (permalink)  
Alt 19-08-2003, 09:17
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

du ersetzt AUSFALLZEITEN durch tagesstatus

Pascals SELECT macht folgendes: Die beiden Tabellen werden anhand der server_id verknüpft, daach wird so gefiltert, dass nur server_ids drinstehen, die nicht in der tabelle tagesstatus drinstehen
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #9 (permalink)  
Alt 19-08-2003, 09:55
el_espiritu
 Junior Member
Links : Onlinestatus : el_espiritu ist offline
Registriert seit: May 2003
Beiträge: 170
el_espiritu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von mrhappiness
du ersetzt AUSFALLZEITEN durch tagesstatus

Pascals SELECT macht folgendes: Die beiden Tabellen werden anhand der server_id verknüpft, daach wird so gefiltert, dass nur server_ids drinstehen, die nicht in der tabelle tagesstatus drinstehen
OK, jetzt wird das ganze klarer!
Aber wofür stehen denn "S.*" und "AF" ???
Mit Zitat antworten
  #10 (permalink)  
Alt 19-08-2003, 09:56
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

FROM SERVER S => die spalten der tabelle kannst du jetzt mit S.<spaltenname> ansprechen

für AF gilt genau das selbe
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #11 (permalink)  
Alt 19-08-2003, 11:29
el_espiritu
 Junior Member
Links : Onlinestatus : el_espiritu ist offline
Registriert seit: May 2003
Beiträge: 170
el_espiritu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich hab das jetzt mal so gemacht:

PHP-Code:
SELECT S.* FROM server S
LEFT JOIN tagesstatus AZ ON 
(AZ.server_id S.server_id)
WHERE AZ.server_id IS NULL and AZ.tag_stoerstart_datum >= CURRENT_DATE
So bekomme ich eine leere Ausgabe. Wenn ich das "AZ.server_id" in "AF.server_id" abändere bekomme ich eine Fehlemeldung:
Unknown table 'AF' in on clause

Irgendwas stimmt da noch nicht....
Mit Zitat antworten
  #12 (permalink)  
Alt 19-08-2003, 11:48
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

AF kann ja nich gehen, weil es keine tabelle gibt die so heißt

mach aus dem AND mal ein OR

du suchst ja die server, die nicht in tagesstatus drinstehen ODER deren störung vor weniger als 1 tag behoben wurde

Code:
az.server_id IS NULL OR az.tag_stoerstart_datum >=NOW() - INTERVAL 1 DAY
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #13 (permalink)  
Alt 19-08-2003, 12:14
el_espiritu
 Junior Member
Links : Onlinestatus : el_espiritu ist offline
Registriert seit: May 2003
Beiträge: 170
el_espiritu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

"tag_stoerstart_datum" ist das Datum, an dem der Server ausgefallen ist. Momentan bekomme ich zwar eine Ausgabe, aber die entspricht nicht dem was eigentlich sein sollte.
Es wird unter anderem auch ein Sever ausgegeben, der als Eintrag in "tagesstatus" mit einer Störung drinsteht....
Mit Zitat antworten
  #14 (permalink)  
Alt 19-08-2003, 12:23
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Code:
SELECT 
  S.*, IF(ISNULL(AZ.tag_stoerstart_datum),'nicht ausgefallen', AZ.tag_stoerstart_datum)
FROM
  server s
  LEFT JOIN tagesstatus az USING (server_id)
WHERE
  az.server_id IS NULL
  OR
  az.tag_stoerstart_datum>=NOW() - INTERVAL 1 DAY
sollte dir alle server liefern und entweder ein 'nicht ausgefallen' oder das datum des störungsauftritts, wenn die störung innerhalb der letzten 24 stunden auftrat

probier das mal in phpmyadmin aus und poste was rauskommt


wenn's nich das is, was rauskommen soll, poste auch noch was du haben willst
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #15 (permalink)  
Alt 19-08-2003, 12:54
el_espiritu
 Junior Member
Links : Onlinestatus : el_espiritu ist offline
Registriert seit: May 2003
Beiträge: 170
el_espiritu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das sieht schon mal super aus, Ausgabe:


server_id............ser_name...............IF(ISNull az.tag_stoerst.......
......2....................server2.................nicht ausgefallen
......3....................server3.................nicht ausgefallen
......4....................server4.................2003-08-19
......6....................server5.................nicht ausgefallen


Die Ausgabe stimmt soweit mit den Datensätzen der Ausfälle überein.
Aber er gibt den 1. und den 5. Server nicht aus, die normalerweise auch keinen Eintrag hatten. Woran könnte denn das liegen ?
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Projektmanagement Damals und Heute
Projektmanagement Damals und HeuteWerfen Sie einen Blick auf das, was sich verändert hat, und entdecken Sie, wo die Zukunft dieses Gebietes hinsteuert.

18.01.2021 | Berni

Arbeitsmanagement-Tools
Arbeitsmanagement-ToolsWarum jedes Team Arbeitsmanagement-Tools benötigt. Man schätzt, dass 25% eines durchschnittlichen Mitarbeiter-Tages durch ineffiziente Arbeit vergeudet werden.

11.12.2020 | Berni


 

Aktuelle PHP Scripte

Formmailer Bootstrap 4

Mit dem Formmailer kann man sich eMails über seine Seite zukommen lassen.

08.07.2021 arne-home | Kategorie: PHP/ Formular
Fehlerseite Bootstrap 4

Bei Aufruf einer nicht existierenden Seite, teilen Sie Besuchern mit einer eigenen Fehlerseite mit, dass die gewünschte Seite nicht gefunden wurde. Die eigene Fehlerseite sollte dasselbe Design wie die Website haben. Zudem sollte ein Link zur Startseite a

04.07.2021 arne-home | Kategorie: PHP/ Counter
Upload Bootstrap 4

Mit dem PHP - Uploadscript kann man schnell und einfach Bilder und Dateien auf den Webserver hochladen.

04.07.2021 arne-home | Kategorie: PHP/ File
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:10 Uhr.