我正在为一个帖子创建一个唯一访问次数的计数器,所以我到现在所拥有的是一个用于存储这样的数据的表格;
cvp_post_id | cvp_ip | cvp_user_id
如果注册用户访问帖子,首次会在cpv_post_id
和cvp_user_id
中插入记录,那么在下次访问时我会查询表格,如果记录可用,我会不算他是新来访者。
如果是匿名用户,则会发生同样的情况,但现在使用了cvp_ip
和cpv_post_id
。
我担心的是,每当有人访问帖子检查是否有访问时,我都会进行查询,这样做会有什么更有效的方式?
答案 0 :(得分:2)
创建一个包含三列的唯一索引,并使用IGNORE
关键字执行插入:
INSERT IGNORE INTO your_table (cvp_post_id, cvp_user_id)
VALUES(1, 1);
大多数用户只会访问一次,因此您可以避免SELECT
后跟INSERT
。
答案 1 :(得分:0)
有一种非常简单的方法可以帮助您使用会话保存大量查询,它应该是这样的:
if(!isset($_SESSION['visited_post'][$yourPostID]))
{
//Perform your code
$_SESSION['visited_post'][$yourPostID] = true;
}
答案 2 :(得分:0)
为用户创建会话,在会话开启时,您需要检查一次(打开会话时)。从现在开始,当用户访问您已经知道他在数据库中的帖子时。