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 Thema bewerten
  #1 (permalink)  
Alt 24-11-2010, 12:26
PaulK
 Registrierter Benutzer
Links : Onlinestatus : PaulK ist offline
Registriert seit: Nov 2010
Beiträge: 5
PaulK befindet sich auf einem aufstrebenden Ast
Standard Hilfe für mysql qry

Hallo,

Ich bräuchte Hilfe bei einem/mehreren SQL Query's.

Zuersteinmal der Hintergrund:
Es handelt sich um ein Alarmanlagen Monitoring, dass ich im Rahmen meiner Ausbildung zum Fachinformatiker basteln soll.
Letztendlich soll überprüft werden ob ein Bereich über nacht Scharfgestellt war oder nicht:

Gesucht werden in der Datenbank (siehe unten) alle vorkommen bei denen die "Action"="ENTSCHAERFT" ist, nachdem der Bereich schon "Action"="GESCHAERFT"wurde (abhänig von einer Uhrzeit also bis 1 Uhr zum beispiel)


Die Datenbank sieht so aus:
Code:
ISEId     Counter     Date            PersID    Action         Linie    Keyx                 Dummy
xxx     37831         2007-05-03 16:45:33     ns     ENTSCHAERFT     1     161254165057001000000000     0
xxx     41631         2007-06-18 17:05:21     jk     ZUTRITT     3     161219207205003000000000     0
xxx     43116         2007-07-04 18:08:26     mba     ---         1     161009111149004000000000     1
xxx     43122         2007-07-05 00:10:31     GSA     ---         2     161028075152004000000000     1

Hier ein beispiel wie sich die bereiche zusammensetzen
Code:
+-----------------+-------+
| ISEId      | Linie |
+-----------------+-------+
| xxx001    |     0 | Eingang
| xxx002    |     1 | Keller1
| xxx003    |     2 | Erdgeschoss1
| xxx004    |     3 | Erdgeschoss Einlieger
| xxx005    |     0 | Blah
| xxx006    |     1 | Blah2
| xxx007    |     2 | Bah3

Über hilfe und anregungen würde ich mich freuen.

Paul
Mit Zitat antworten
  #2 (permalink)  
Alt 24-11-2010, 12:41
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

dein Anliegen ist so nicht nachvollziehbar. Dort steht nirgends "GESCHAERFT", dafür aber "---".

Dann sieht es so aus, als bildeten ISEId und Linie einen Mehrfeldprimärschlüssel. Muss das sein? Wenn ja, warum? Sind in der ersten Tabelle dann beide Spalten ein Mehrfeldfremdschlüssel?

Formulier bitte dein Problem in Form von Pseudocode oder ausführlichem Text, z. B. "Liefere alle Datensätze aus Tabelle XY, für die es ... gibt, wenn ... kleiner als ... aus der Tabelle YZ ist, wobei ..."

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 24-11-2010, 13:48
PaulK
 Registrierter Benutzer
Links : Onlinestatus : PaulK ist offline
Registriert seit: Nov 2010
Beiträge: 5
PaulK befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Dann sieht es so aus, als bildeten ISEId und Linie einen Mehrfeldprimärschlüssel. Muss das sein? Wenn ja, warum? Sind in der ersten Tabelle dann beide Spalten ein Mehrfeldfremdschlüssel?
Ja das muss leider so sein, da unsere Alarmanlage das so vorgibt (RDFI Chip System das von einer Externen Firma so eingerichtet wurde und ich nichts

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Formulier bitte dein Problem in Form von Pseudocode oder ausführlichem Text, z. B. "Liefere alle Datensätze aus Tabelle XY, für die es ... gibt, wenn ... kleiner als ... aus der Tabelle YZ ist, wobei ..."
Vielleicht hätte ich noch erwähnen sollen das das ganze in PHP umgesetzt werden soll.

Kleine Erklärung: Das Script wird jeden Tag automatisiert ausgeführt und soll nur für den letzten Tag ausgeben ob Abends der jeweilige Bereich scharf gestellt wurde.

Dann versuch ich das mal:
Code:
// < im bezug auf Datumsangaben bedeutet jünger 11.11.2010 < 10.11.2010
for "alle Bereiche" 

array1 =
{SELECT * FROM `tblprotokoll` 
WHERE Action=GESCHAERFT & Date <= {Aktuelle Zeit-1 Tag}
}
array2 =
{SELECT * FROM `tblprotokoll` 
WHERE Action=ENTSCHAERFT & (Date <= {Aktuelle Zeit- 1 Tag}
}
//-- Unter der Voraussetzung, dass  in den Array's nur das letzte vorkommen (Zeitmäßig)
for i = 1 to array1.last i=i+1
     for j=1 to array2.last j=j+1
          if array1(i.Date) < array2(j.Date) then
              Bereich ist unscharf
          else
              Bereich ist scharf
          end if
     do
do
Mit Zitat antworten
  #4 (permalink)  
Alt 24-11-2010, 13:56
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Code:
SELECT ... 
FROM ... 
WHERE `Action` = 'GESCHAERFT' 
AND YEAR(`Date`) = $year 
AND MONTH(`Date`) = $month 
AND DAY(`Date`) = $day 
AND HOUR(`Date`) BETWEEN $eveningStart AND $eveningEnd
liefert die Einträge eines Tages. Da das Script jeden Tag läuft, ist das völlig ausreichend.
Du musst lediglich die $-Variablen so belegen, dass es passt.

Geändert von onemorenerd (24-11-2010 um 13:59 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 24-11-2010, 13:58
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich versuch's mal, sag einfach ob so es richtig ist, also ob du es so meintest:

Liefere alle Bereiche, die a) nach 18:00 nicht scharf gestellt wurden oder b) bereits vor 6:00 wieder entschärft worden sind.

Kommt das hin? Wenn Bereich A abends nicht scharf gestellt wurde, greift Teilbedingung a. Wenn Bereich B zwar abends scharf gestellt wurde, aber später (z. B. 20:00 und damit vor 6:00) wieder entschärft wurde, greift Teilbedingung b. Letztere würde aber auch greifen, wenn jemand um 0:00 kommt, entschärft, 1 Stunde bleibt und um 1:00 beim Gehen wieder scharf stellt. Hier musst du entscheiden, ob du das willst.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #6 (permalink)  
Alt 24-11-2010, 14:33
PaulK
 Registrierter Benutzer
Links : Onlinestatus : PaulK ist offline
Registriert seit: Nov 2010
Beiträge: 5
PaulK befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Ich versuch's mal, sag einfach ob so es richtig ist, also ob du es so meintest:

Liefere alle Bereiche, die a) nach 18:00 nicht scharf gestellt wurden oder b) bereits vor 6:00 wieder entschärft worden sind.

Kommt das hin? Wenn Bereich A abends nicht scharf gestellt wurde, greift Teilbedingung a. Wenn Bereich B zwar abends scharf gestellt wurde, aber später (z. B. 20:00 und damit vor 6:00) wieder entschärft wurde, greift Teilbedingung b. Letztere würde aber auch greifen, wenn jemand um 0:00 kommt, entschärft, 1 Stunde bleibt und um 1:00 beim Gehen wieder scharf stellt. Hier musst du entscheiden, ob du das willst.
Leider geht das so nicht, da wir Bereiche bei uns im Bürokomplex haben, die bis spät in die Nacht (oder auch mal Morgenstunden) begangen werden.


Ich Versuche es mal aus zu Formulieren:

Wenn Bereich A abends scharf gestellt wurde und danach bis 6 Uhr niemand mehr entschärft: Alles okay.

Wenn Bereich B abends scharf gestellt wurde, aber Nachts entschärft wurde und dann wieder scharf gestellt wurde, ist alles okay.

Wenn Bereich C abends nicht scharf gestellt wurde und dieser Zustand bis 6.00 Uhr anhält, muss dies Ausgegeben werden.

Wenn Bereich D abends scharf gestellt wurde, aber Nachts entschärft wurdeund dieser Zustand bis 6.00 Uhr anhält, muss dies Ausgegeben werden.

Gruß
Paul
Mit Zitat antworten
  #7 (permalink)  
Alt 24-11-2010, 14:39
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von PaulK Beitrag anzeigen
Leider geht das so nicht, da wir Bereiche bei uns im Bürokomplex haben, die bis spät in die Nacht (oder auch mal Morgenstunden) begangen werden
Okay, das versteh ich, aber dann musst du in deinen Beispielen das Wort "abends" definieren.

Ich würde in diesem Falle das was du suchst so formulieren: Alle Bereiche, die um 05:59:59 Uhr nicht scharf waren, bevor um 06:00:00 alles wieder entschärft wurde. Passt das besser?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #8 (permalink)  
Alt 24-11-2010, 15:29
PaulK
 Registrierter Benutzer
Links : Onlinestatus : PaulK ist offline
Registriert seit: Nov 2010
Beiträge: 5
PaulK befindet sich auf einem aufstrebenden Ast
Standard

Ja das trifft es.

Ob abends nun 18.00 Uhr ist oder schon um 14.00 Uhr anfängt hat ja eigentlich nur Auswirkung auf die Laufzeit des Scriptes da, mehr Datensätze durchsucht werden müssen.

Gibt es in PHP eine Möglichkeit ein SQL QRY in ein Mehrdimisionales Aray zu schreiben, bzw hat jemand eine funktion für mich parat mit der ich Arbeiten kann?

Geändert von PaulK (24-11-2010 um 15:58 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 24-11-2010, 15:50
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Na dann ist es ganz einfach:

1. Du holst dir das letzte Scharfstellen und das letzte Entschärfen
Code:
select ...
from ...
where `Action` = 'GESCHAERFT'
    and `Date` < $time
order by `Date` desc
limit 1
und
Code:
select ...
from ...
where `Action` = 'ENTSCHAERFT'
    and `Date` < $time
order by `Date` desc
limit 1
wobei $time die Uhrzeit des Entschärfens am darauffolgenden Morgen ist, z. B. 06:00:00

2. Du vergleichst du die beiden Datensätze hinsichtlich der Zeit und erkennst daraus den letzten aktiven Zustand vor $time.

Das ganze kann man natürlich auch in einer einzigen Abfrage machen, indem man Self Joins benutzt.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #10 (permalink)  
Alt 24-11-2010, 16:06
PaulK
 Registrierter Benutzer
Links : Onlinestatus : PaulK ist offline
Registriert seit: Nov 2010
Beiträge: 5
PaulK befindet sich auf einem aufstrebenden Ast
Standard



Habe meinen brain lag überwunden und seit ich deine Antwort habe gut 3/4 des Scripts fertig geschrieben.
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL 4.1] Hilfe - mySQL bereitet mir Kopfschmerzen erbring SQL / Datenbanken 3 26-01-2006 13:53
PHP MYsql hilfe jasco83 PHP Developer Forum 14 08-09-2004 15:53
Hilfe-MySQL, PHP Winex SQL / Datenbanken 17 13-05-2004 17:54
MySQL Hilfe Kersten SQL / Datenbanken 7 29-10-2003 10:34
[MySQL 4.0] Hilfe! Kann aus PHP heraus nicht auf MySql zugreifen... Juergen2 Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 3 10-08-2003 11:13

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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:06 Uhr.