Получение данных из таблицы за определенный период времени

Grek

Новичок
Получение данных из таблицы за определенный период времени

Объясню ситуацию. Есть скрипт на пхп, есть база данных MySQL и в ней есть табличка. Для наглядности я приведу выдуманный пример. Итак в табличке есть поле "Описание" и есть поле "logTime" (Время хранится в юникосовой метке. Год, месяц, число, час, минута, секунда) Одним запросом, мне нужно подсчитать количество записей в таблице, где совпадает дата. А точнее первая ее часть. а именно, год, месяц, число. То есть подсчитать количество записей в таблице за один день. Я использую следующий запрос.
$result = db_query("
SELECT COUNT(*)
FROM table
WHERE " . strftime('%Y%m%d', 'logTime') . " = $date ");

Переменная $date у меня определяется ранее и принимает вид 20051013 (Год, месяц, число) Вся проблема в том, что в операции сравнения оперируют два числа, юниксовая метка и нормальная дата (Выбрать все, где 1128827629 = 20051013)
Из этого понятно, что в моем запросе временная метка юникс, не переводится в дату и из-за этого я не могу получить нужный мне результат. Подскажите, как быть? Правильный ли я использую запрос к базе? Что я делаю не так?
 

Andreika

"PHP for nubies" reader
код вообще не понял %) почему logTime из запроса находится в пхпшной strftime?

-~{}~ 13.10.05 19:59:

$date = юниксовый timestamp на 0 минут искомого дня
WHERE logTime BETWEEN($date1,$date1+3600*24)
 

Grek

Новичок
Пржде чем сравнить $date с logTime, я пытаюсь лог тайм привести к тому же виду что и переменная $date, а именно год, месяц, число. logTime я обрамил, дабы прекратить работу PHP и получить поле из таблицы. Разве это неправильно?
 

Grek

Новичок
Андрей, ну поделись опытом, подскажи как это можно сделать проще? Только без изменения полей MySQL и даже без изменения типа данных поля logTime =) Документацию сейчас почитаю, возможно и вправду что-то найду)
 

Andreika

"PHP for nubies" reader
чет я запутался какие у тебя стандартные юниксовые метки...
если 20051013193301 для (19:33:01) то
WHERE $date = FLOOR(logTime/1000000)
если из UNIX_TIMESTAMP() то
WHERE $date = FLOOR(logTime/(3600*24))
 

Grek

Новичок
Изначально поле у меня int(10). Не я типы данных прописывал, но менять их нельзя, на это поле много что завязано. А время хранится в таком виде: 1129195668 означает 13 октября 2005 года.

-~{}~ 13.10.05 22:34:

Автор оригинала: chisto_tolyan
а как насчет DATE_FORMAT?
А где именно?
SELECT COUNT(*)
FROM table
WHERE DATE_FORMAT('%Y%d%m' 'logTime') = $date

Так?
 

Andreika

"PHP for nubies" reader
PHP:
$date = strftime('%Y%m%d', 1129195668); // твое 20051013
mysql_query("SELECT COUNT(*) FROM table WHERE FROM_UNIXTIME( logTime, '%Y%d%m' )  = $date");

$date1 = floor(1129195668/(3600*24));
mysql_query("SELECT COUNT(*) FROM table WHERE $date1 = FLOOR(logTime/(3600*24)) ");
 

Grek

Новичок
Спасибо, ребят. Посижу еще подумаю. Думаю этого хватит, направили Вы меня в нужное русло...))
 

Grek

Новичок
Огромное Вам спасибо! FROM_UNIXTIME помогло. Признателен!
 
Сверху