Um das Thema nochmal neu zu entfachen (nach dem HDD Crash des Forums) wie gewünscht mal das Stück Code und dazu auch eine SQL-TestDB
Nicht wundern, hier sind nur zwei Kopierer enthalten, es sind durchaus mehr vorhanden, auch weit aus mehr Einträge als Werte für die Seitenzahlen... etc...
Problem ist halt, dass wenn er Werte in der einen Tabelle "history_uint" nicht findet, müsste er dann die zweite Tabelle "history" durchsuchen, ob er da den Wert findet...
Benötigt wird es um die Seitenzahlen der letzten drei Monate (Monatsweise) aus der Zabbix SQL-DB auszulesen.
Spoiler anzeigen
#include <MySQL.au3>
#include <array.au3>
Global $items[27][9], $array_Tage[3][3]
$SQL = _MySQLConnect("xxxx","xxxx","test","dein Server")
Abfrage_Drucker_Itemid()
Abfrage_HostBeschreibung()
Abfrage_Tage()
Abfrage_Seitenanzahl()
Func Abfrage_Drucker_Itemid()
$i = 1
$var = _Query($SQL,"Select itemid, hostid FROM items WHERE description='Kopierer Gesamtseiten' OR description='Drucker TotalPages' OR description='Kyocera TotalPages';")
With $var
While NOT .EOF
$items[$i][0]=.FIELDS("itemid").value
$items[$i][1]=.FIELDS("hostid").value
$i = $i +1
.MoveNext
WEnd
EndWith
$items[0][0]= $i
Global $Abfrage_Seitenzahl[$items[0][0]][3]
;~ _ArrayDisplay($items, "datenNach befüllen")
EndFunc
Func Abfrage_HostBeschreibung()
$i = 1
For $j = 1 to $items[0][0]-1
$stringbau2 = "Select host FROM hosts WHERE hostid='" & $items[$i][1] & "';"
$hello = _Query($SQL,$stringbau2)
With $hello
While NOT .EOF
$items[$i][2]=.FIELDS("host").value
$i = $i +1
.MoveNext
WEnd
Endwith
Next
;~ _ArrayDisplay($items, "", "", "", "", "itemid|hostid|hostname")
EndFunc
Func Abfrage_Tage()
$i = 1
$date = _Query($SQL,"Select ( Select UNIX_TIMESTAMP(DATE_FORMAT(Last_day(Date(Now())- INTERVAL 1 MONTH), '%Y-%m-01 00:00:01')) ) As ErsterTagVormonat, ( Select UNIX_TIMESTAMP(DATE_FORMAT(Last_day(Date(Now())- INTERVAL 2 MONTH), '%Y-%m-01 00:00:01')) ) As ErsterTagVorVormonat, ( Select UNIX_TIMESTAMP(DATE_FORMAT(Last_day(Date(Now())- INTERVAL 3 MONTH), '%Y-%m-01 00:00:01')) ) As ErsterTagVorVorVormonat, ( Select UNIX_TIMESTAMP(DATE_FORMAT(Last_day(Date(Now())- INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')) ) As LetzterTagVormonat, ( Select UNIX_TIMESTAMP(DATE_FORMAT(Last_day(Date(Now())- INTERVAL 2 MONTH), '%Y-%m-%d 23:59:59')) ) As LetzterTagVorVormonat, ( Select UNIX_TIMESTAMP(DATE_FORMAT(Last_day(Date(Now())- INTERVAL 3 MONTH), '%Y-%m-%d 23:59:59')) ) As LetzterTagVorVorVormonat;")
With $date
While NOT .EOF
$array_Tage[1][0]=.FIELDS("ErsterTagVormonat").value
$array_Tage[1][1]=.FIELDS("ErsterTagVorVormonat").value
$array_Tage[1][2]=.FIELDS("ErsterTagVorVorVormonat").value
$array_Tage[2][0]=.FIELDS("LetzterTagVormonat").value
$array_Tage[2][1]=.FIELDS("LetzterTagVorVormonat").value
$array_Tage[2][2]=.FIELDS("LetzterTagVorVorVormonat").value
$i = $i+1
.MoveNext
WEnd
EndWith
;~ _ArrayDisplay($array_Tage, "datenNach befüllen")
EndFunc
Func Abfrage_Seitenanzahl()
$p = 0
$st = 3
$st2 = 4
$nd = 0
For $sm = 1 To 3
$i = 1
For $j = 1 to $items[0][0]-1
$stringbau = "SELECT Max(value) AS MaxWert,Min(value) AS MinWert FROM history_uint WHERE itemid='" & $items[$i][0] & "' AND clock>='" & $array_Tage[1][$nd] & "' AND clock<='" & $array_Tage[2][$nd] & "';"
$Abfrage_Seiten = _Query($SQL,$stringbau)
If $Abfrage_Seiten > 0 Then
With $Abfrage_Seiten
While NOT .EOF
ConsoleWrite(.FIELDS("MinWert").value & @CRLF)
$items[$j][$st]=.FIELDS("MinWert").value
$items[$j][$st2]=.FIELDS("MaxWert").value
$i = $i +1
.MoveNext
WEnd
EndWith
Else
$stringbau = "SELECT Max(value) AS MaxWert,Min(value) AS MinWert FROM history WHERE itemid='" & $items[$i][0] & "' AND clock>='" & $array_Tage[1][$nd] & "' AND clock<='" & $array_Tage[2][$nd] & "';"
$Abfrage_Seiten = _Query($SQL,$stringbau)
With $Abfrage_Seiten
While NOT .EOF
;~ ConsoleWrite(.FIELDS("MinWert").value & @CRLF)
$items[$j][$st]=.FIELDS("MinWert").value
$items[$j][$st2]=.FIELDS("MaxWert").value
$i = $i +1
.MoveNext
WEnd
EndWith
EndIf
Next
$st = $st +2
$st2 = $st2 +2
$nd = $nd +1
$p = $p +1
Next
_ArrayDisplay($items, "Daten nach Abfrage", "", "", "", "itemdid|hostid|hostname|MonatHeute-3_min|MonatHeute-3_max|MonatHeute-2_min|MonatHeute-2_max|MonatHeute-3_min|MonatHeute-3_max")
EndFunc
_MySQLEND($SQL)
[/autoit]