PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Datumsvergleich innerhalb 7 Tagen (http://www.selfphp.de/forum/showthread.php?t=22594)

bernhard3105 24.12.2009 10:41:38

Datumsvergleich innerhalb 7 Tagen
 
Hallo SQL-Master.

Ich bin mir einigermaßen sicher, dass ihr Profis eine schöne, saubere Lösung für mein kleines SQL-Problem habt, sonst würde ich mir da sicher was zusammen murksen:

In meiner Tabelle gibt es ein
Feld 'vondatum',
Typ Variant,
Daten = Datums im UNIX-Zeitstempel.

Meine Abfrage soll mir auf alle Fälle den nach aktuellem Tagesdatum nächsten Datensatz liefern
oder
die nächsten BEIDEN Datensätze falls das Datum von Satz1 zu Satz2 nicht mehr als 7 Tg auseinanderliegt.

Ich hoffe, ich habe mich klar genug ausgedrückt.

Klar geht das einfach mit '...order by vondatum limit 2', aber dann weiß ich noch nicht, ob beide Sätze nur maximal 7 Tage auseinanderliegen.

Vielleicht habt ihr ja was Schönes für mich.
Ansonsten wünsche ich Euch auf jeden Fall schon
Frohe Weihnachten
und einen Guten Rutsch.

Bernhard aus Schwerte

Ckaos 29.12.2009 08:24:02

AW: Datumsvergleich innerhalb 7 Tagen
 
Hi

was ist Variant?
Zitat:

In meiner Tabelle gibt es ein
Feld 'vondatum',
Typ Variant,
naja gehe davon aus das die Spalte zu
Zitat:

Daten = Datums im UNIX-Zeitstempel.
richtig formatiert ist.

Code:

select * from tabelle where daten>=UNIX_TIMESTAMP(CURDATE()) and daten<=UNIX_TIMESTAMP(date_add(CURDATE(),INTERVAL 7 DAY)) limit 2
MfG

Ckaos

bernhard3105 30.12.2009 08:20:41

AW: Datumsvergleich innerhalb 7 Tagen
 
Danke für die Antwort. Ich hau da manchmal Visual Basic, SQL und php durcheinander.
Ich speichere den UNIX-Timestamp bisher in ein varchar-Feld der SQL-Datenbank.
Ist das gut so oder gibt es da sinnvollere Datentypen für die Spalte, die dann bessere Auswertungen des Datums ermöglichen ??

urvater 02.01.2010 03:10:20

AW: Datumsvergleich innerhalb 7 Tagen
 
Zitat:

Zitat von bernhard3105 (Beitrag 133366)
Ich speichere den UNIX-Timestamp bisher in ein varchar-Feld der SQL-Datenbank.
Ist das gut so oder gibt es da sinnvollere Datentypen für die Spalte, die dann bessere Auswertungen des Datums ermöglichen ??

Ja. Datums- und Zeittypen

cortex 02.01.2010 09:53:19

AW: Datumsvergleich innerhalb 7 Tagen
 
Zitat:

Zitat von bernhard3105 (Beitrag 133366)
Ich speichere den UNIX-Timestamp bisher in ein varchar-Feld der SQL-Datenbank.
Ist das gut so oder gibt es da sinnvollere Datentypen

abgesehen von urvaters hinweis wäre INT (integer) zu nennen, wenn man nicht zuviel logik auf das dbms auslagern möchte. der speicherbedarf dieses datentyps ist darüber hinaus sehr klein.

cx

bernhard3105 02.01.2010 11:34:21

AW: Datumsvergleich innerhalb 7 Tagen
 
Ich danke euch für eure Hilfe.
Bisher hatte ich mein Datum in einem DATE-Feld gespeichert. Der Einfachheit halber bin ich jetzt im Zuge einer Neuprogrammierung vom DATE-Feld zum VARCHAR-Feld und Datumswerte im UNIX-Zeitstempelformat gewechselt. Mußte aber nun feststellen, dass mir da eine ganze Menge SQL-Datumsauswertungen schlecht oder garnicht möglich waren und bin jetzt wieder beim Date-Feld gelandet. Na ja, so ist das halt, wenn man als Halbwissender an solche Sachen rangeht. Aber dafür gibts ja auch dieses wirklich tolle Forum mit vielen erstklassigen und hilfsbereiten Experten. Vielen Dank nochmal und einen Guten Start ins neue Jahr.
Bernhard aus Schwerte

vt1816 02.01.2010 11:38:49

AW: Datumsvergleich innerhalb 7 Tagen
 
Zitat:

Zitat von bernhard3105 (Beitrag 133411)
[...]
Mußte aber nun feststellen, dass mir da eine ganze Menge SQL-Datumsauswertungen schlecht oder garnicht möglich waren

Welche waren Dir denn da nicht möglich?

bernhard3105 03.01.2010 11:34:40

AW: Datumsvergleich innerhalb 7 Tagen
 
Na ja, da ist immer noch das Problem, welches ich im Eingang geschildert habe. Der Vorschlag von Ckaos funktioniert so nicht oder ich kriegs nicht hin. Und dann wäre ja noch die Sache mit Datums vor 1970. Die gehen ja sowieso nicht im Unix-Timestamp. Also ist auf jeden Fall das Date-Format sinnvoll.
Zu meinem oben geschilderten Problem:
Benötige also eine Abfrage die mir den vom aktuellen Datum den nächsten Datensatz liefert.
PHP-Code:

$sql "SELECT * FROM msc_infos WHERE vdatum >= CURDATE() ORDER BY vdatum LIMIT 1;" 

Kein Problem also (vdatum ist ein Datum einer zukünftigen Sportveranstaltung im Date-Format).

Falls von diesem gelieferten vdatum aus gesehen in den weiteren 7 Tagen noch weitere Veranstaltungen anstehen (max 2) möchte ich diese noch dazu geliefert bekommen.
Im mysql_fetch_object sollten sich also zwischen 0 und 3 Datensätze befinden.

Zur Zeit lese ich die nächsten drei Datensätze in ein array und vergleiche diese dann über php-code. Vielleicht gibt es ja eine feine sql-Lösung. Wäre schön und ich hab wieder was gelernt.
Bis dann
Bernhard

Ckaos 03.01.2010 15:28:03

AW: Datumsvergleich innerhalb 7 Tagen
 
HI


Zitat:

Zitat von bernhard3105 (Beitrag 133440)
Na ja, da ist immer noch das Problem, welches ich im Eingang geschildert habe. Der Vorschlag von Ckaos funktioniert so nicht oder ich kriegs nicht hin.

Dann schreib ich ihn das du nur noch Copy & Paste machen musst und erkläre dir dazu den gedankengang.

Code:

$sql = "SELECT * FROM msc_infos WHERE vdatum >= CURDATE() and vdatum <= date_add(CURDATE(),INTERVAL 7 DAY) ORDER BY vdatum LIMIT 3;"
>= CURDATE() -> is ja klar alles was jetzt oder gößer jetzt ist.
<= date_add(CURDATE(),INTERVAL 7 DAY) -> alles was kleiner oder gleich jetzt plus 7 tagen ist

date_add = etwas zu einem Datum addieren
interval x = Intervallwert
DAY = Tage
siehe MYSQL

mfg

Ckaos

bernhard3105 03.01.2010 18:13:53

AW: Datumsvergleich innerhalb 7 Tagen
 
Vielen Dank, das du mir nochmal helfen möchtest, dein Vorschlag funktioniert zwar, aber nicht so wie ich es brauche.

Denn so wie ich deinen sql-string verstehe addierst du im date_add 7 Tage zum aktuellen Datum hinzu. Ich erhalte also nur Datensätze, wenn diese sich innerhalb von sieben Tagen befinden.

Ich schreibe mein Anliegen mal so auf:

- auf jeden Fall den datumsnächsten Datensatz, egal was für ein vdatum
- Datensatz2 nur, wenn vdatum1 zu vdatum2 < 7 Tage
- Datensatz3 nur, wenn vdatum1 zu vdatum3 < 7 Tage*

*meinetwegen kann hier auch vdatum2 mit vdatum3 verglichen werden, das wäre egal


Der Sinn dahinter ist der: auf unserer Webseite gibt es ein klar begrenztes Feld für Werbung unserer nächsten großen Sportveranstaltung auch wenn diese noch Monate in der Zukunft liegt. Allerdings haben wir an einem Wochenende sogar zwei oder drei große Veranstaltungen. Daher sollen mindestens ein und maximal drei Werbebanner angezeigt werden können, wenn diese Veranstaltungen innerhalb von 7 Tagen liegen.
Wenn die Veranstaltungen länger als 7 Tage auseinander liegen reicht die Anzeige von einer, der nächsten Veranstaltung, da die Werbezeitspanne für die übernächsten Veranstaltungen ausreichend bleiben.

Irgendwie habe ich die Befürchtung, dass das mit sql nicht geht, bin mal gespannt.
Für eure Bemühungen bedanke ich mich schon mal sehr.
Viele Grüße
Bernhard


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:44:26 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.