Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MySQL - Timestamp vergleichen

Frage Entwicklung Datenbanken

Mitglied: Dani

Dani (Level 5) - Jetzt verbinden

08.09.2008, aktualisiert 10.09.2008, 7704 Aufrufe, 7 Kommentare

Moin DB Jungs,

ich habe hier eine MySQL Datenbankserver der Version 5.0.32 am Laufen. Auf diesem Server läuft eine Datenbank mit der Tabelle "users". So sieht ein Eintrag aus:
FeldTypKollationAttributeNullStandardExtra
idint(11) Nein auto_increment
user_ipvarchar(100)latin1_swedish_ci JaNULL
user_idvarchar(50)latin1_swedish_ci Nein0
user_nickvarchar(100)latin1_swedish_ci NeinUnknown
admin_ipvarchar(100)latin1_swedish_ci JaNULL
admin_idvarchar(50)latin1_swedish_ci Nein0
admin_nickvarchar(100)latin1_swedish_ci NeinUnknown
typevarchar(10)latin1_swedish_ci NeinS
reasonvarchar(255)latin1_swedish_ci Nein
created int(11) Nein0
lengthvarchar(100)latin1_swedish_ci Nein
server_ipvarchar(100)latin1_swedish_ci Nein
server_namevarchar(100)latin1_swedish_ci NeinUnknown


iduser_ipuser_iduser_nickadmin_ipadmin_idadmin_nicktypereasoncreatedlengthserver_ipserver_name
417NULL52609HILDEGUARDxx4.1xx.9x.1x42199775testSfehleingabe12208285255website

Nun möchte ich abfragen, ob die Sperre des Users mit der user_id "2199775" breits abgelaufen ist? Sprich es wird in die Spalte "created" ein UNIX-Timestamp geschrieben. In "length" stehen dann immer Minuten drin - keine Sekunden oder Stunden. Das kann ich auch nicht abändern, auf ein einheitliches Format!

Somit muss ich eigentlich "nur" abfragen, ob der Timestamp in der Zelle + Länge größer ist als der aktuelle Zeitstempel. In SQL sieht die Abfrage dann so aus:
01.
SELECT * FROM bans WHERE user_id != '' AND user_id = '52609' AND UNIX_TIMESTAMP() < (created +(length*60));
Leider wird die Sperre auch noch nach 10 Minuten als "aktiv" ausgegeben. Was ich aber nicht nachvollziehen kann.
Meine Vermutung ist, dass es Probleme mit der Multilikation gibt...aber kann kein wirklichen Fehler entdecken!


Gruss,
Dani
Mitglied: Biber
08.09.2008 um 07:47 Uhr
Moin Dani,

Meine Vermutung ist, dass...
Okay, dann lass es uns doch prüfen.
Ändere Dein Statement doch mal kurz so ab, dass alle relevanten Details bzw. Fehlerursachen im Resultset enthalten sind.
01.
SELECT b.user_id, Unix_timestamp() as UnixTS, b.created, b.length,  
02.
 (b.created + (b.length*60)) as EndUnixTScalc 
03.
FROM bans b  
04.
WHERE b.user_id = 52609 
P.S. Habt Ihr eigentlich irgendwelche Regeln, nach denen Ihr Datentypen oder Feldlängen auswählt oder macht das immer noch Stevie Wonder bei Euch?

Grüße
Biber
^^[Edit] Montägliche Tippfehlerberichtigung s.u. [/Edit]
Bitte warten ..
Mitglied: Dani
08.09.2008 um 12:10 Uhr
Moin Biber,
auch dieses DB - Design ist nicht auf unserem Mist gewachsen! Sonst hätte ich es einfach angepasst bzwl. die Jungs mal "rund" gemacht. Ich habe aber bereits ein BugIssue dies bezüglich in deren Forum eingestellt mit der Bitte das Desgin in v6.0 bitte anzupassen.....

Nun zu dem SQL-Statement:
Das blicke ich ehrlich gesagt noch nicht so....warum "Unix_timestamp as unixts"? Das Attribut gibt es doch gar nicht. Das frisst der SQl-Server auch nicht! Folgender Fehler erscheint:
01.
MySQL meldet:   
02.
#1054 - Unknown column 'Unix_timestamp' in 'field list'
Was ich auch nicht verstehe, warum frägst du 2 Tabellen in "FROM" ab?!


Gruss,
Dani
Bitte warten ..
Mitglied: Biber
08.09.2008 um 12:34 Uhr
Moin Dani,

sorry, es war mir heute morgen wohl doch noch zu früh fürs tippfehlerfreie Posten...
Es muss natürlich Unix_timestamp() [Unix_timestamp-KlammerAuf-KlammerZu] heißen, es ist ja kein Feld, sondern die gleichnamige Funktion.

Und ich gebe nicht zwei Tabellen an, sondern (D)eine Tabelle bans mit einem Alias [b], eben weil ich ja nicht nur Felder aus dieser tablle SELECTen will, sondern auch noch diesen Unix_TimeStamp().
Ich füge die Klammern mal oben im Source nach - ist natürlich dennoch ungetestet wie immer.

Grüße
Biber
Bitte warten ..
Mitglied: Dani
08.09.2008 um 13:45 Uhr
Hi Biber,
kein Ding...geht mir 7 Tage in der Woche so.

Also ich habe das SQL-Statment angepasst. Meines sieht so aus:
01.
SELECT b.user_id, Unix_timestamp() as UnixTS, b.created, b.length, (b.created + (b.length*60)) as EndUnixTScalc FROM bans b WHERE b.user_id = 'test' AND Unix_timestamp() < (b.created + (b.length*60));
Allerdings verstehe ich den Unterschied zu meinem Statement oben nicht. Ich sehe da keinen großen Unterschied bis auf die selektierten Attribute. ???

Die Ausgabe sieht so aus:
user_idUnixTScreatedlengthEndUnixTScalc
test1220890650122089064051220890940

Man sieht also prima, den Vergleich der Zeitstempel....


Gruss,
Dani
Bitte warten ..
Mitglied: Biber
08.09.2008 um 15:15 Uhr
Moin Dani,

oben nicht. Ich sehe da keinen großen Unterschied bis auf die selektierten Attribute. ???
Ähmm ... ooookay......
Eigentlich wollte ich auch nicht mehr damit erreichen als (s.o.) mal alle potentiell fehlerhaft berechneten Spalten auf den Schirm zu bringen.
Magst Du den hoffentlich einzeiligen Resultset mal posten?

Grüße
Biber
Bitte warten ..
Mitglied: Dani
08.09.2008 um 18:19 Uhr
Hi Biber,
hmm....da war wohl ein Table-Tag zu viel drin. Jetzt siehts (siehe oben) schon besser aus.
Ich werd's jetzt mal in Testbetrieb schalten und diese Wochen im Auge behalten. Du erhälst dann pünktlich zum 17 Uhr Feierabend am Freitag mein Feedback.


Gruss,
Dani
Bitte warten ..
Mitglied: Dani
10.09.2008 um 11:29 Uhr
Hi Biber,
der "bug" - Fall wurde bereits mehrmals durchgespielt und tauchte nicht mehr auf.
Ich verstehs zwar immer noch nicht - aber ist mir euch ehrlich gesagt egal.....


Gruss,
Dani
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell - Dateien aus verschiedenen Arrays - Attribute vergleichen (5)

Frage von Giffas zum Thema Batch & Shell ...

PHP
PHP MySQL Login (7)

Frage von Yanmai zum Thema PHP ...

Batch & Shell
gelöst Dateiinhalte vergleichen - Gemeinsamkeiten anzeigen (9)

Frage von Rotnasenkater zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...