2010-12-29 2 views
1

Jetzt verwende ich php timestamp (time()) in meinen Spalten als Zeitstempel. Ich benutze es, weil ich dachte, dass es effizienter ist, es als Integer zu speichern, als Datetime zu verwenden.Ich habe eine Tabelle, die Daten mit einer Datumsspalte enthält. Mysql Query-Hilfe benötigt!

Jetzt habe ich ernsthafte Probleme mit der Auswahl der Zeit zwischen zwei Zeitstempeln.

Zum Beispiel, ich versuche, Aufzeichnungen hinzugefügt gestern zu bekommen (das heißt zwischen dem heutigen Datum in PHP-Zeitstempel und todaysdate - 24 Stunden in PHP-Timestamp)

Es ist wie dieser Code in SQL-Pseudo sieht

SELECT * FROM table 
WHERE date < phptimestamp(todaysdate) AND date > phptimestamp(todaysdate -24h) 

Es bringt mir einige Datensätze, aber aus irgendeinem Grund die Datensätze zwischen diesem Bereich weiter zu chaning. Die Zeitstempel, zwischen denen ich suche, sind statisch. Die Datensätze zwischen diesen Zeitstempeln sollten nicht geändert werden, da alle hinzugefügten Datensätze einen aktuellen Stempel haben.

Real-Code

$date = getdate(); 

$m = time() - (5 * 60); 
$h = time() - (($date['minutes'] * 60) + $date['seconds']); 
$d = time() - ((60 * 60 * $date['hours']) + ($date['minutes'] * 60) + $date['seconds']); 
$y = time() - ((60 * 60 * 24) + ($date['hours'] * 60 * 60) + ($date['minutes'] * 60) + $date['seconds']); 

$crawledm = mysql_fetch_assoc(mysql_query("SELECT count(crawled) as count FROM domains WHERE crawled != '' AND crawled > '{$m}'")); 
$crawledm = $crawledm['count']; 
$crawledh = mysql_fetch_assoc(mysql_query("SELECT count(crawled) as count FROM domains WHERE crawled != '' AND crawled > '{$h}'")); 
$crawledh = $crawledh['count']; 
$crawledd = mysql_fetch_assoc(mysql_query("SELECT count(crawled) as count FROM domains WHERE crawled != '' AND crawled > '{$d}'")); 
$crawledd = $crawledd['count']; 
$crawledy = mysql_fetch_assoc(mysql_query("SELECT count(crawled) as count FROM domains WHERE crawled != '' AND crawled > '{$y}' AND crawled < '{$d}'")); 
$crawledy = $crawledy['count']; 
+0

Benötigen Sie mehr Code, um vollständig zu analysieren (PHP nennt diese mysql, etc ...) ... echter Code ist 10x besser als Pseudocode. – jondavidjohn

Antwort

2

Ich gehe davon aus, dass Sie den Spaltentyp TIMESTAMP in Ihrer Tabelle verwenden und keinen UNIX-Zeitstempel (der nur eine ganze Zahl wäre).

Es gibt keinen Grund, Datumsangaben als Integer zu speichern - MySQL (und alle anderen dbms) ist auf eine sehr intelligente Art und Weise für die Verarbeitung von Daten und Zeiten optimiert.

Vorausgesetzt, dass Sie Ihre Reisedaten in Datetime/Zeitstempel Spalten speichern, sollten Sie in der Lage sein, diese Abfrage zu verwenden:

SELECT * 
FROM `table` 
WHERE `date` BETWEEN DATE_SUB(NOW(), INTERVAL 1 DAY) AND NOW() 

Auch, wie Sie mit Datum und Uhrzeit in MySQL arbeiten, this doc page ist dein Freund.

+0

Ich benutze Unix-Zeitstempel in meinen Tabellen, leider. –

+0

Ich würde vorschlagen, das persönlich zu ändern. Andernfalls können Sie jede Referenz auf Ihre Unix-Timestamp-Spalten in FROM_UNIXTIME einfügen, wie von alexn vorgeschlagen. – TehShrike

+0

Könnten Sie mir bitte Fragen stellen. Ich verstehe, dass es zu viel zu fragen ist, also müssen Sie nicht. –

0

ersetzen phptimestamp mit FROM_UNIXTIME Ihre ganze Zahl auf einen tatsächlichen Zeitstempel zu konvertieren. Dies sollte Ihnen ermöglichen, tatsächliche Daten und nicht nur ganze Zahlen zu vergleichen.

+0

Ich benutze phptimestamp in der Tabelle, und das ist das Problem –

Verwandte Themen