2013-04-06 4 views
0

Рассмотрим следующую таблицу:как получить счет от MySQL между 2-х часов

CREATE TABLE `trans` (
    `transid` varchar(255) NOT NULL, 
    `affid` varchar(255) NOT NULL, 
    `timestamp` varchar(255) NOT NULL, 
    UNIQUE KEY `transid` (`transid`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

и PHP код:

case "today": 
    $sale=[]; 
    for ($i = 0 ; $i < 23 ; $i++) { 
     $hours[]= $i; 
     $clicks[$i]=$api["clicks"][$i]; 
    }  
    break; 

Я хочу, чтобы добавить в $sale массив сегодня количество продаж за каждый час , Что-то вроде: $ hours [5] = выберите count (*) из trans где .. дата между сегодняшним 04:59:59 - 06:00:00.

+0

Хотите почасовую разбивку продаж по току день? В каком поле представлены продажи? Я не понимаю ваш PHP-код, поскольку он вообще не имеет отношения к базе данных. –

+0

временная метка не должна быть 'varchar' – hd1

+0

временная метка должна храниться как? –

ответ

0

Что-то вроде этого:

<?php 
$from=strtotime("".date("Y-m-d")." 04:59:59"); 
$to=strtotime("".date("Y-m-d")." 06:00:00"); 
?> 

"SELECT * FROM `your_table` 
WHERE `date` > '".$from."' 
AND `date` < '".$to."'" 

может быть?

Вы можете использовать gmdate(), если вам нужно текущее время в формате UTC вместо местного времени, которое вы получите с помощью date().

+1

Вам нужно процитировать время – Barmar

+0

, но дата хранится как временная отметка unix –

+0

Я отредактировал ответ сейчас. Теперь это полезно? Попробуйте и позвольте мне знать.;) –

0

Прежде всего, если вы пытаетесь использовать временные метки unix для поля timestamp, остановите его сейчас. Вы уже делаете свою жизнь болезненной. Используйте поле timestamp MySQL. Есть очень мало случаев использования, когда рекомендуется использовать временную метку unix.

Если у вас есть поле метки времени вы могли бы сделать что-то вроде

SELECT HOUR(`timestamp`) AS `hour`, SUM(`transid`) AS `transaction_count` 
FROM trans 
WHERE `timestamp` LIKE CONCAT(DATE(NOW()),'%') 
GROUP BY `hour` 
ORDER BY `hour` ASC 

Это даст вам рассчитывать продажи за каждый час текущего дня. Не забудьте добавить индекс на timestamp для оптимальной производительности запросов.

Если вы не имеете timestamp, то вам необходимо использовать дополнительные FROM_UNIXTIME() преобразования, которые препятствовали бы вам быть в состоянии использовать индекс timestamp