在我的网站上,我创建了一个update_date
列,我会自动为每一行存储更新表格行的日期(每一行都像文章页面)。我使用on update CURRENT_TIMESTAMP
完成了这项工作。
问题是我还创建了一个pageview
列,用于存储用户对每个页面执行的所有访问。
我希望在update_date
列中考虑新访问时不自动更新pageview
。是否有可能获得编写一些PHP代码或只使用MySQL查询?
答案 0 :(得分:2)
如果您将时间戳字段设置为其值,则不会将其设置为当前时间戳,因此您只需向查询添加update_date = update_date
即可:
UPDATE articles SET update_date = update_date, pageviews = pageviews + 1 WHERE id = :the_id;
但是,既然你实际上正在更新你的文章,那么update_date
就会失去一点意义。
我建议你在一个不同的表中记录访问,通过外键链接到文章,所以文章时间戳只会在文章内容真正更新时更新,而不仅仅是页面浏览量计数:
例如,它可以是一个表 visits ,其中文章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;
答案 1 :(得分:0)
您更改了表格,因此您不会对update_date
进行自动更新,但在更新内容时明确仅将update_date
设置为now()
,或{{1} }