2016-11-08 62 views
2

在我的网站上,我创建了一个update_date列,我将自动为每一行存储更新表格行时的日期(每一行就像一个文章页面)。我已经使用on update CURRENT_TIMESTAMP完成了这项工作。请勿仅针对特定操作更新“更新CURRENT_TIMESTAMP”

问题是我还创建了一个pageview列,其中存储了用户对每个页面执行的所有访问。

我想不要自动更新update_date当在pageview列中记录新访问时。有没有可能获得这个编写一些PHP代码或只使用MySQL查询?

+0

是的,但问题是......怎么样? :) – mauro269

+0

*“有没有可能......”*不是在问怎么问,而是问如何太广泛。 –

+1

我建议你在不同的表中记录访问,通过外键链接到文章,文章时间戳只会在文章更新时更新,而不会更新其页面浏览量。 – Veve

回答

2

如果时间戳字段设置为它的价值,它不会被设置为当前时间戳,所以你可以简单地添加update_date = update_date到查询:

UPDATE articles SET update_date = update_date, pageviews = pageviews + 1 WHERE id = :the_id; 

但因为你实际上更新文章,update_date松了一点点的意思。 我建议你在一个不同的表中记录访问,通过外键链接到文章,因此文章时间戳只有在文章内容真正更新时才会更新,而不仅仅是其页面浏览次数:

例如,它可以是一个表访问,其中这里的物品ID#1具有13次,和制品#3具有7的制品#2,不存在,没有视图:

+--+----------+--------+ 
|id|article_id|pageview| 
+--+----------+--------+ 
| 1|  1 |  13 | 
+--+----------+--------+ 
| 2|  3 |  7 | 
+--+----------+--------+ 

然后到检索文章#3的浏览量:

SELECT pageview FROM visits WHERE article_id = 3; 

这种分解还有一个好处,就是可以根据访问次数存储更多信息,通过访问查询字符串,用户代理存储一行,并且访问者记录其user_id例如:

complete_visits

+--+----------+-----------------------------+-------+-------+-------------------+ 
|id|article_id|querystring     |UA  |user_id|visit_date   | 
+--+----------+-----------------------------+-------+-------+-------------------+ 
| 1|  1 |  /article/1/?search=test |Firefox|null |2012-12-12 12:12:12| 
+--+----------+-----------------------------+-------+-------+-------------------+ 
| 2|  1 |    /article/1/ |Firefox|12  |2012-12-13 12:12:12| 
+--+----------+-----------------------------+-------+-------+-------------------+ 
| 3|  1 |  /article/1/?search=a |Firefox|null |2012-12-14 12:12:12| 
+--+----------+-----------------------------+-------+-------+-------------------+ 
| 4|  1 |  /article/1/?search=b |Firefox|null |2012-12-15 12:12:12| 
+--+----------+-----------------------------+-------+-------+-------------------+ 
| 5|  1 |  /article/1/?search=c |Firefox|null |2012-12-16 12:12:12| 
+--+----------+-----------------------------+-------+-------+-------------------+ 
| 6|  1 |  /article/1/?order=asc |IE  |null |2012-12-17 12:12:12| 
+--+----------+-----------------------------+-------+-------+-------------------+ 
| 7|  3 |     /article/3/ |Chrome |null |2012-12-18 12:12:12| 
+--+----------+-----------------------------+-------+-------+-------------------+ 
| 8|  3 |     /article/3/ |Firefox|4  |2012-12-19 12:12:12| 
+--+----------+-----------------------------+-------+-------+-------------------+ 
| 9|  3 |  /article/3/?search=test |Firefox|null |2012-12-20 12:12:12| 
+--+----------+-----------------------------+-------+-------+-------------------+ 

要检索的网页浏览量为文章#3:

SELECT COUNT(id) FROM complete_visits WHERE article_id = 3; 
+0

我建议你把它作为评论。 –

+0

这可能是一个解决方案,我只理解如何使用外键链接两个表。 – mauro269

+0

@ mauro269看看我的编辑,我已经添加了例子。 – Veve

0

要么你查因此你不会自动更新update_date,但是当你更新内容时只显式地设置update_datenow(),或者update contents set counter=counter+1,update_date=update_date where id=12345;

+0

对不起,我不明白...我可以请你解释一下吗?我没有现在()在我的MySQL属性。 – mauro269

+0

now()是一个返回当前时间戳的mysql函数。尝试“select now()” –

+0

使用Veve解决方案解决。无论如何,感谢您的支持。 – mauro269