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
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #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

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

SMT

Server Monitoring & Management Tool Das SMT wurde von einem Administrator für Administratoren entwickelt, es vereinfacht den Alltag in der klassischen Administration und Verwaltung. Mit dem SMT kannst Du alle Deine Server & Dienste verwalten und überwach

04.09.2020 palle_1977 | Kategorie: PHP
numaeks Web-Farbmixer

Die RGB-Farben lassen sich hier auf unterschiedliche Weise mischen. Zur Einstellung werden auch die Dreh- und Schieberegler mit Canvas verwendet. Gespeichert werden die Farben in einem Cookie.

04.09.2020 numaek | Kategorie: JAVASCRIPT/ Tools
phplinX-Erotikportal 4 ansehen phplinX-Erotikportal 4

Erweiterbares Portal speziell für Erotik mit den Modulen Webkatalog, Bannermanagement und Kleinanzeigenmarkt. Sämtliche Module können über einen einzigen Adminbereich verwaltet werden.

18.06.2020 Cosinus14 | Kategorie: PHP/ Anzeigenmarkt
 Alle PHP Scripte anzeigen

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