Datumsanzeige
fritz85
- php
0 Sven Rautenberg0 fritz850 Sven Rautenberg0 Auge
Hallo,
Ich habe mehrere Inserate in meiner Tabelle gespeichert.... Ein Inserat kann an mehreren Daten erscheinen...eingeschrieben sind die im Timestamp Format "123484,384389,438943"
Nun muss ich eigentlich alle Inserate auslesen die zwischen
Heute + 15 Tage sind... also alle Inserate welche heute bis die nächsten 15 Tage aktiv sind möchte ich auslesen.. Kann mir da jemand helfen??
Moin!
Ich habe mehrere Inserate in meiner Tabelle gespeichert....
Welche Tabelle? Wo ist die?
Ein Inserat kann an mehreren Daten erscheinen...eingeschrieben sind die im Timestamp Format "123484,384389,438943"
Dieses Format scheint mir für die Aufgabe extrem ungeeignet. Ein Timestamp definiert eine exakte Sekunde - was bedeutet das für das Inserat? Wird es nur eine Sekunde angezeigt, oder an dem gesamten Tag von 00:00:00 bis 23:59:59 Uhr? Oder _ab_ der Timestamp-Uhrzeit bis zu einer anderen Timestamp-Uhrzeit?
Nun muss ich eigentlich alle Inserate auslesen die zwischen Heute + 15 Tage sind... also alle Inserate welche heute bis die nächsten 15 Tage aktiv sind möchte ich auslesen.. Kann mir da jemand helfen??
Wie liest du generell aus? Siehe die erste Frage oben zum Thema "Tabelle".
- Sven Rautenberg
Welche Tabelle? Wo ist die?
in meiner MySQL Datenbank
Dieses Format scheint mir für die Aufgabe extrem ungeeignet. Ein Timestamp definiert eine exakte Sekunde - was bedeutet das für das Inserat? Wird es nur eine Sekunde angezeigt, oder an dem gesamten Tag von 00:00:00 bis 23:59:59 Uhr? Oder _ab_ der Timestamp-Uhrzeit bis zu einer anderen Timestamp-Uhrzeit?
Es ist so in der Datenbank eingetragen: 1205881200,1206745200, usw.
Wie liest du generell aus? Siehe die erste Frage oben zum Thema "Tabelle".
generell habe ich die mit LIKE ausgelesen...
Nun muss ich ja Inserate zwischen den Daten auslesen...
das funktioniert leider nicht:
$heute = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$tage = mktime(0, 0, 0, date("m"), date("d")+10, date("Y"));
$query2 = $db->dbquery("SELECT * FROM inserate WHERE daten BETWEEN $heute and $tage ORDER BY daten ASC");
//und dann umwandeln in normales format (zum anzeigen für die user):
$separateDaten = explode(',',$row['daten']);
sort($separateDaten, SORT_NUMERIC);
for($i=0;$i<count($separateDaten);$i++)
{
$daten = date("d.m.Y",$separateDaten[$i]);
}
Das Problem ist ja sicherlich da die Daten in der Mysql DB mit "," getrennt eingetragen sind.....jedoch bräuchte ich halt da ne Lösung das er mir die korrekt ausliest.....
also von $heute bis $tage
Moin!
Welche Tabelle? Wo ist die?
in meiner MySQL Datenbank
Version?
Dieses Format scheint mir für die Aufgabe extrem ungeeignet. Ein Timestamp definiert eine exakte Sekunde - was bedeutet das für das Inserat? Wird es nur eine Sekunde angezeigt, oder an dem gesamten Tag von 00:00:00 bis 23:59:59 Uhr? Oder _ab_ der Timestamp-Uhrzeit bis zu einer anderen Timestamp-Uhrzeit?
Es ist so in der Datenbank eingetragen: 1205881200,1206745200, usw.
Wie ich schon sagte: Extrem ungünstige Speicherform, Daten als String, und dann noch kommaseparierte Unix-Timestamps.
Die korrekte Speicherform ist:
a) für das Datum selbst als Spaltenformat DATE oder DATETIME (je nachdem, ob die Uhrzeit wichtig ist und gespeichert werden muß, oder nicht)
b) für die 1:n-Verknüpfung von Daten mit Inseraten eine separate Tabelle.
Wie liest du generell aus? Siehe die erste Frage oben zum Thema "Tabelle".
generell habe ich die mit LIKE ausgelesen...
Auch ganz schlecht. Das erfordert Stringoperationen, die nicht durch einen Index unterstützt werden können.
Nun muss ich ja Inserate zwischen den Daten auslesen...
das funktioniert leider nicht:
$heute = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$tage = mktime(0, 0, 0, date("m"), date("d")+10, date("Y"));
$query2 = $db->dbquery("SELECT * FROM inserate WHERE daten BETWEEN $heute and $tage ORDER BY daten ASC");
Hättest du wenigstens die Timestamps als INT in einer separaten Tabelle gespeichert, würde diese Abfrage (unter Hinzufügung des notwendigen Joins) ja im Prinzip funktionieren.
Mit DATE als Datenformat würdest du dir auch die Umwandlung in Timestamps sparen können.
//und dann umwandeln in normales format (zum anzeigen für die user):
$separateDaten = explode(',',$row['daten']);
sort($separateDaten, SORT_NUMERIC);
for($i=0;$i<count($separateDaten);$i++)
{
$daten = date("d.m.Y",$separateDaten[$i]);}
Und das wäre auch der Datenbank zu überlassen, die kann dir problemlos dein Wunschdatumsformat aus einem DATE-Feld generieren, dass mit PHP nur noch auszugeben ist.
- Sven Rautenberg
Hallo
Dieses Format scheint mir für die Aufgabe extrem ungeeignet.
Es ist so in der Datenbank eingetragen: 1205881200,1206745200, usw.
Wie Sven schon schrieb, ist das Format und die Art der Speicherung ungeeignet. Wenn du davon ausgehen kannst, dass ein Inserat _nur_ einmalig von dann bis dann gültig ist, kannst du mit zwei DATE- oder DATETIME-Spalten für Start- und Endzeitpunkt die entsprechenden Daten angeben und die Abfrage dann auf den dazwischen liegenden Zeitraum beschränken.
Das Datum eines Inserats muss gleich dem heutigen Tag (bei einer eintägigen Gültigkeit) ODER "größer oder gleich" Startdatum UND "kleiner oder gleich" Enddatum sein.
Das lässt sich rein mit den MySQL-Mitteln erledigen.
Tschö, Auge