2014-01-16 3 views
0

Я пытаюсь показать мои загрузки запроса между сегодня и одной недели назад, вот мой запросзапросов между двумя Отметка времени Дата

SELECT 
     COUNT(1) AS d_count, 
     d_timestamp 
    FROM dl_table 
    WHERE id = 'someid' 
     AND d_timestamp BETWEEN 1389830400 AND 1389260583 
    GROUP BY d_timestamp 
    ORDER BY d_timestamp ASC LIMIT 7; 

Этот запрос не работает правильно, и вернуть мне нулевой столбец или верните мне 7 столбцов с 1 значением в d_coun t, что совершенно неправильно !!! В чем проблема ?

Любые идеи?

Примечание:

1389830400 равно сегодня отметку времени, которое я получаю его через strtotime("today");.

1389260583, равный -1 неделе назад timestamp, который я получаю через strtotime("-7 day");.

d_timestamp - целочисленный столбец.

+0

Преобразовать 'd_timestamp' поле для shorttime перед тем Comparision –

+0

@SuyashKhandwe Можете ли вы дать мне пример? – iSun

+0

Почему вы должны использовать GROUP BY? –

ответ

2
SELECT 
    COUNT(id) AS downloads, 
    FROM_UNXTIME(d_timestamp, '%Y-%m-%d') AS day 
FROM dl_table 
WHERE id = 'someid' 
AND d_timestamp BETWEEN 1389830400 AND 1389260583 
GROUP BY day 
ORDER BY day 

Это должно сработать. Форматирование метки времени более читаемо, и это делает 100% уверенным, что вы группируетесь днем, даже если метка времени не совпадает точно с 00:00 (по любой причине, которая может быть).

+0

Спасибо, это работа - возможно ли показать все строки за один день до и одну неделю назад, Не хотите, чтобы сегодня показывали загрузки до 12:00? – iSun

+0

Просто скорректируйте свою вторую временную метку, что означает 'strtotime (« today »);' становится 'strtotime (« - 1 день »);'. –

+0

Еще один вопрос - он работает, но меня немного смущает, когда я делаю время с 'FROM_UNXTIME', последний день не соответствует действительности, например, если toady равен 16 января, и у меня есть строка в моей таблице с сегодняшней датой' FROM_UNXTIME' показать мне 15 января, пока дата другой строки верна! – iSun

0

Попробуйте этот запрос, как это кажется, что есть какая-то проблема с колонкой d_timestamp значения
SELECT COUNT(1) AS d_count, d_timestamp FROM dl_table WHERE id = 'someid' AND CAST(d_timestamp AS UNSIGNED) BETWEEN 1389830400 AND 1389260583 GROUP BY d_timestamp ORDER BY d_timestamp ASC LIMIT 7;

Смежные вопросы