不要仅针对特定操作更新“on update CURRENT_TIMESTAMP”

时间:2016-11-08 19:10:24

标签: php mysql

在我的网站上,我创建了一个update_date列,我会自动为每一行存储更新表格行的日期(每一行都像文章页面)。我使用on update CURRENT_TIMESTAMP完成了这项工作。

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

我希望在update_date列中考虑新访问时不自动更新pageview。是否有可能获得编写一些PHP代码或只使用MySQL查询?

2 个答案:

答案 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} }