PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Select zweier Datensätze um das heutige Datum (http://www.selfphp.de/forum/showthread.php?t=22887)

Topper23 23.02.2010 09:05:42

Select zweier Datensätze um das heutige Datum
 
Hallo zusammen.

Kurze Erklärung:
In meiner Datenbank habe ich Einträge, die immer ein Startdatum (als Timestamp) und einen Text haben. Das könnten n Einträge sein.

Ich möchte nun die 2 Einträge Auswählen (SELECT über php) die das heutigen Datum (Timestamp) umklammern.
PHP-Code:

$jetzt mktime(); 

Wie geht ein solches Select? Ich möchte ja nicht between a und b haben sondern eher sowas wie around date. Hat da jmd ne Idee?

PHP-Code:

SELECT text FROM datenbank WHERE startdatum AROUND $jetzt LIMIT 0,1

So in der Art stelle ich es mir vor. Ich hoffe auf eure Hilfe.
Martin

Topper23 23.02.2010 09:14:34

AW: Select zweier Datensätze um das heutige Datum
 
Ich kam gerade selber auf die erfolglose Idee 2 Abfragen zu machen und diese zu verbinden aber...
PHP-Code:

$db_anfrage1 ="SELECT text FROM datenbank WHERE startdatum <= $jetzt LIMIT 0,1";
$db_anfrage2 "SELECT text FROM datenbank WHERE startdatum > $jetzt LIMIT 0,1";

$db_ergebnis1 mysql_query($db_anfrage1$serververbindung);
$db_ergebnis2 mysql_query($db_anfrage2$serververbindung); 

...leider ist $db_ergebnis2 leer... :-(

Ckaos 23.02.2010 11:00:49

AW: Select zweier Datensätze um das heutige Datum
 
Hi

Zitat:

Ich möchte ja nicht between a und b haben sondern eher sowas wie around date. Hat da jmd ne Idee?
Du könntest eine range definieren mit DATE_ADD und DATE_DIFF und dann per BETWEEN
nach treffern fragen.

mfg

Ckaos

Topper23 23.02.2010 12:32:48

AW: Select zweier Datensätze um das heutige Datum
 
Hallo CKaos,

leider kann ich keine Range definieren, da die Einträge in der Datenbank mal 1 Woche mal aber auch ein halbes Jahr auseinanderliegen können. Außerdem habe ich eben noch eine weitere Schwierigkeit entdeckt: Es kann ja sein, dass es keinen Eintrag gibt, der nach heute kommt. (also wo timestamp > jetzt ist).
Puuh, kniffelig.

Hoffe auf weitere Ideen.
MfG Martin

Ckaos 23.02.2010 13:22:48

AW: Select zweier Datensätze um das heutige Datum
 
Hi

Zitat:

leider kann ich keine Range definieren
Warum nicht?
Zitat:

da die Einträge in der Datenbank mal 1 Woche mal aber auch ein halbes Jahr auseinanderliegen können.
Würde sich auch so lösen lassen.
Zitat:

Außerdem habe ich eben noch eine weitere Schwierigkeit entdeckt: Es kann ja sein, dass es keinen Eintrag gibt, der nach heute kommt. (also wo timestamp > jetzt ist).
Was ja bei der range keinen unterschied macht.

Ich merke mein vorgestellter Ansatz kommt nicht wie gewünscht an. ;)
Also hier mal ein Bsp. vielleicht hilft dir das diesen weiter zu denken.
PHP-Code:

function range($timestamp,$type){
  
$sql="SELECT * FROM TABELLE WHERE SPALTE BETWEEN DATE_SUB(".$timestamp.",INTERVAL 1 ".$type." AND DATE_SUB(".$timestamp.",INTERVAL 1 ".$type.")";
  
//Hier mysqlquery und verarbeitung des Ergebnisses
}

//Aufruf dann wie folgt
$ergebnis_woche=range($DATUM,"WEEK");
//Wenn kein Ergebnis dann weiter
$ergebnis_woche=range($DATUM,"MONTH");
//usw

mfg

Ckaos 


Topper23 23.02.2010 22:10:03

AW: Select zweier Datensätze um das heutige Datum
 
werds morgen im büro mal ausprobieren :)

urvater 24.02.2010 07:02:18

AW: Select zweier Datensätze um das heutige Datum
 
Im Beispiel wurde 2x DATE_SUB genutzt. (Vermute mal Tipfehler) Einmal müsste meiner Meinung nach in DATE_ADD geändert werden. Das folgende AND wäre ja sonst identisch mit der Bedingung zuvor.

Topper23 24.02.2010 08:40:38

AW: Select zweier Datensätze um das heutige Datum
 
Guten morgen,

nachdem ich nun 1 Nacht darüber geschlafen habe, hab ich auch kapiert wohin diese funktion führen könnte. Der erste Between parameter wäre heute der zweite also meine range... (zum beispiel 2 quartele).

Leider habe ich noch ein problem in meiner abfrage. ich bekomme kein ergebnis von der DB geliefert. Hier mein query:
PHP-Code:

SELECT FROM tabelle WHERE startdatum BETWEEN DATE_ADD(CURRENT_TIMESTAMPINTERVAL 2 WEEK) AND DATE_SUB(CURRENT_TIMESTAMPINTERVAL 2 QUARTERORDER BY startdatum ASC LIMIT 06

Wo ist denn da der fehler nu?

Meinem Verständnis nach sollte er also alles zwischen "jetzt" und "den letzten 6 Monaten" anzeigen. In der DB sind die startdatum felder als timestamp gespeichert... und wenn ich mal so von hand reinschaue siehe da... da gibt es mind. 1 Eintrag der in den letzten 6 Monaten vorlag.

EDIT: Wenn ich eine händische DB-Abfrage mache mit BETWEEN damals AND jetzt dann gibt er mir die richtigen Einträge aus

Topper23 24.02.2010 09:57:02

AW: Select zweier Datensätze um das heutige Datum
 
waaaah, ich verzweifle bald... bin auf halbem weg:

PHP-Code:

SELECT FROM tabelle WHERE startdatum
BETWEEN 1157001006 
AND UNIX_TIMESTAMP(NOW())
ORDER BY startdatum ASC LIMIT 0

Jetzt muss ich nur den ersten timestamp dazu umdüddeln, dass der UNIX_TIMESTAMP(NOW()) minus 6 Monate genommen wird und keine statische zeit. abre wie?!?! *fastheul*

Ckaos 24.02.2010 10:35:18

AW: Select zweier Datensätze um das heutige Datum
 
Hi

sei mir nicht böse aber das is wie wenn du nach 1+1 fragst ;)
Steht doch alles in den vorherigen posts.

Aber ich schreibe dir gerne die fertige Lösung zum kopieren bereit.

Code:

// BETWEEN kleines_datum(Vergangenheit) AND großes_datum(Zukunft?)
SELECT * FROM tabelle WHERE startdatum
BETWEEN UNIX_TIMESTAMP(DATE_SUB(NOW(),INTERVAL 6 MONTH)) AND UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL 2 WEEK))
ORDER BY startdatum ASC LIMIT 0, 6

Und das ganze schreibst du nun in eine Funktion und kannst dann
diese immer wieder mal verwenden ;)

PS: Natürlich war das ein schreibfehler arbeite ja auch mit copy&paste *gg

mfg

Ckaos


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:55:07 Uhr.

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