在我的网站上,我创建了一个update_date
列,在那里我自动存储,对于每一行,当我更新我的表的行(每行就像一个文章页面)的日期。我已经使用on update CURRENT_TIMESTAMP
。
问题是,我还创建了一个pageview
列,在那里我存储了用户对每个页面的所有访问。
我想要的是在pageview
列中计算新的访问时不自动更新update_date
。是否有可能获得这写一些PHP代码或只是使用MySQL查询?
如果您将时间戳字段设置为其值,则不会将其设置为当前时间戳,因此您可以简单地将update_date = update_date
添加到查询中:
UPDATE articles SET update_date = update_date, pageviews = pageviews + 1 WHERE id = :the_id;
但是因为你实际上在更新你的文章,update_date
失去了一点意义。我建议你在一个单独的表中记录访问,通过外键链接到文章,所以文章的时间戳将只在文章内容真正更新时更新,而不仅仅是它的页面浏览量计数:
+--+----------+--------+
|id|article_id|pageview|
+--+----------+--------+
| 1| 1 | 13 |
+--+----------+--------+
| 2| 3 | 7 |
+--+----------+--------+
然后检索文章#3的页面浏览量:
SELECT pageview FROM visits WHERE article_id = 3;
这种分离也有一个好处,它是一个完美的地方存储额外的信息沿着访问的数量,通过存储一行访问与querystring,用户代理,如果访问者被记录其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;
您可以更改您的表,这样您就不会自动更新update_date
,但在更新内容时仅显式地将update_date
设置为now()
,或者,update contents set counter=counter+1,update_date=update_date where id=12345;