Mysql 如何按天数选择访客计数
我有这个表,我需要从中选择按日期计算的访客数Mysql 如何按天数选择访客计数,mysql,sql,date,Mysql,Sql,Date,我有这个表,我需要从中选择按日期计算的访客数 CREATE TABLE `visitors` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `ip` VARCHAR(32) NOT NULL, `browser` VARCHAR(500) NOT NULL, `version` VARCHAR(500) NOT NULL, `platform` ENUM('w','l','m') NOT NULL, `date`
CREATE TABLE `visitors` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`ip` VARCHAR(32) NOT NULL,
`browser` VARCHAR(500) NOT NULL,
`version` VARCHAR(500) NOT NULL,
`platform` ENUM('w','l','m') NOT NULL,
`date` DATE NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `person` (`ip`,`date`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
我试试这个:
SELECT DATE(`date`) AS `date`, COUNT(*) AS `visitor`
FROM `visitors` WHERE (`date` >= (NOW() - INTERVAL 7 DAY))
GROUP BY `date`;
date visitor
2015-12-19 2
2015-12-22 5
date visitor
2015-12-17 0 // Make 0 for the day which is not present
2015-12-17 0 // Make 0 for the day which is not present
2015-12-18 0 // Make 0 for the day which is not present
2015-12-19 2
2015-12-20 0 // Make 0 for the day which is not present
2015-12-21 0 // Make 0 for the day which is not present
2015-12-22 5
它返回以下内容:
SELECT DATE(`date`) AS `date`, COUNT(*) AS `visitor`
FROM `visitors` WHERE (`date` >= (NOW() - INTERVAL 7 DAY))
GROUP BY `date`;
date visitor
2015-12-19 2
2015-12-22 5
date visitor
2015-12-17 0 // Make 0 for the day which is not present
2015-12-17 0 // Make 0 for the day which is not present
2015-12-18 0 // Make 0 for the day which is not present
2015-12-19 2
2015-12-20 0 // Make 0 for the day which is not present
2015-12-21 0 // Make 0 for the day which is not present
2015-12-22 5
但我真正想要的是:
SELECT DATE(`date`) AS `date`, COUNT(*) AS `visitor`
FROM `visitors` WHERE (`date` >= (NOW() - INTERVAL 7 DAY))
GROUP BY `date`;
date visitor
2015-12-19 2
2015-12-22 5
date visitor
2015-12-17 0 // Make 0 for the day which is not present
2015-12-17 0 // Make 0 for the day which is not present
2015-12-18 0 // Make 0 for the day which is not present
2015-12-19 2
2015-12-20 0 // Make 0 for the day which is not present
2015-12-21 0 // Make 0 for the day which is not present
2015-12-22 5
如果我尝试使用工会,并以此获得日期,那么示例1周就没有问题。但是如果我需要1年,我能做什么呢?使用序列引擎。因此,您可以在不使用表的情况下生成日期 这将在没有其他发动机的情况下工作。您只需要有一个包含更多记录的表作为天数。倒数天数是限制
SELECT compare_date , count(v.`date`)
FROM (
SELECT DATE(now() - INTERVAL @nr:=@nr+1 DAY) AS compare_date
FROM information_schema.COLUMNS, (SELECT @nr:=-1) AS tmp
LIMIT 7
) AS d
LEFT JOIN `visitors` v ON v.`date` = compare_date
GROUP BY compare_date;
请告诉我这对您很有用。听起来您需要一个日历表。我认为创建一个带有日期的表不是一个好主意。。。它需要大量的内存。。。如果表中没有显示,我需要0。。。这是唯一的问题。@maiabardavelidze sql无法发明不存在的内容,所以您需要某种帮助表。请参阅我上面链接的重复主题。@Maiabardavelize包含所有必要日期的表格是一件令人沮丧的小事。@草莓您甚至不需要日历表格,只需要一个包含数字1到7的表格,正如链接主题所述。它不适用于meI。我不明白如何在我的案例中使用日期添加。有人能帮我吗???我想这可能会有帮助…@maia bardavelidze-我在我的答案中添加了另一个问题。请测试它。是的,它正在工作。最后一个问题。我怎么能在一个月或一年的时间里这样做呢?例如,如果我需要年份信息,我必须获得1月份的最后一个月计数,如果我需要所有信息,我必须获得年份访问计数。。。我该怎么做?