У меня есть таблица, которая содержит данные со столбцом даты. Mysql Query помощь нужна! - PullRequest
1 голос
/ 30 декабря 2010

Теперь я использую метку времени php (time ()) в своих столбцах как метку времени.Я использую его, потому что я думал, что хранить его как целое число будет эффективнее, чем использовать datetime.

Теперь у меня серьезные проблемы с выбором времени между двумя временными метками.

Например, я пытаюсь добавить записи вчера (то есть между сегодняшней датой в php timestamp и todaysdate - 24 часа в php timestamp)

Это выглядит так в псевдокоде sql

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

Это дает мне некоторые записи, но по какой-то причине записи между этим диапазоном продолжают изменяться.Временные метки, которые я просматриваю, являются статическими.Записи между этими отметками времени не должны изменяться, потому что все добавляемые записи имеют отметку currtime.

Реальный код

$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'];

Ответы [ 2 ]

2 голосов
/ 30 декабря 2010

Я предполагаю, что вы используете в своей таблице тип столбца TIMESTAMP , а не метку времени UNIX (которая будет просто целым числом).

Нет причин хранить дату и времякак целое число - MySQL (и все остальные dbms) оптимизированы для обработки дат и времени очень интеллектуальным способом.

Предполагая, что вы храните свои даты в столбцах datetime / timestamp, вы должны иметь возможность использовать этот запрос:

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

Кроме того, когда вы работаете с датами и временем в MySQL, эта страница документа является вашим другом.

0 голосов
/ 30 декабря 2010

Замените phptimestamp на FROM_UNIXTIME , чтобы преобразовать целое число в фактическую метку времени.Это должно позволить вам сравнивать фактические даты, а не только целые числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...