- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的网站上,我创建了一个 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
失去了一点意义。我建议你把访问记录在一个不同的表中,通过外键链接到文章,这样文章时间戳只会在文章内容真正更新时更新,而不仅仅是它的页面访问次数:
例如,它可以是一个表 visits,这里文章 ID #1 有 13 个 View ,文章 #3 有 7 个。文章 #2,不存在,没有 View :
+--+----------+--------+
|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;
关于php - 不要仅为特定操作更新 "on update CURRENT_TIMESTAMP",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40494667/
因此,重新格式化了开发机器并盲目地重新安装了 MAMP 堆栈。现在我的 mariadb 与我们的服务器版本不同(10.2.6 vs 10.0.17)。 将服务器数据库转移到开发人员后,新版本似乎已将所
我得到了以下实体: @Entity public class Person { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(co
当我创建一个新表时 create table test(rId int auto_increment, createtimestamp timestamp not null, PRIMARY KEY
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this q
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this q
In MariaDB 5.5 and before there could only be one TIMESTAMP column per table that had CURRENT_TIMEST
我写了一个sql来计算现在和上次更新时间之间的时间差异。首先,我只使用 CURRENT_TIMESTAMP - Updated_time 并发现结果在时间单位秒内看起来是正确的。但它并不稳定,有时结果
我刚刚花了几个小时来追踪这个错误。给定以下 SQL: DROP DATABASE IF EXISTS db; CREATE DATABASE db; CREATE TABLE db.tbl (t1 T
我正在尝试将数据库从 mysql 移植到 infinidb。但是在移植时出现上述错误(在标题中描述)。 `CREATE_TIMESTAMP` TIMESTAMP NOT NULL DEFAULT CU
我有一个这样的模型 - { "name": "MakeCallTestConfiguration", "base": "PersistedModel", "idInjection": tr
我们正在使用 Oracle 数据库。 在我们的表中时间戳存储为自 1970 年以来的秒数,如何将通过 current_timestamp() 函数获得的时间戳转换为秒 最佳答案 这样做: select
我正在使用Grails版本2.4.0,Java版本1.7和oracle 12c。 我想将apiEventLogList的记录保留在数据库表中。我不想在Java中设置createdTs字段,而是在GOR
我有一个如下所示的查询: $query = "INSERT INTO `SmsServ`.`SmsReceived` ( `Id` , `Body` , `DateRecei
我试图在将行插入数据库之前将 CURRENT_TIMESTAMP 设置为 UTC。根据我的阅读,这就是针对每个连接执行此操作的方法。 我的服务器时区是 EST (+5:00)。 我在调试时执行以下操作
我有一个数据库,其中有一个名为日期(时间戳)的列,该列设置为默认的 CURRENT_TIMESTAMP。这曾经工作正常,但是将数据库迁移到不同的服务器后,时间戳仅在执行 UPDATE 查询后应用,IN
我们目前在 MySQL 数据库上使用触发器,将“上次修改”时间戳设置为 CURRENT_TIMESTAMP。它在更新时调用。 我们还需要对集群使用基于语句的复制。 有没有办法修改触发器,以便传播的 C
我使用准备好的语句插入数据。如何将变量分配给 CURRENT_TIMESTAMP 并绑定(bind)该值? 我有一个包含列“name、lastfed、lastdoc 和 id”的数据库表。名为 las
我犯了一个出生在新西兰的错误,现在必须弄清楚如何在我的服务器时间上增加 15 小时!将不胜感激任何想法。 目前我正在使用: mysql_query(" INSERT INTO articles (Id
我正在尝试向该表中添加一个时间戳列: CREATE TABLE `task` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(
我在我的数据库中创建了一个表格,其中付款时间为 payment_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP。当我在将 payment_time
我是一名优秀的程序员,十分优秀!