我们假设我们有一个名为visits
的表,它有两个字段id
用于页面ID,ip
用于用户的IP地址。
我写过这段代码,我想知道这是不是最好的方式?
$ip=$_SERVER['REMOTE_ADDR'];
$id=$_GET['id'];
$query = "SELECT
(SELECT COUNT(ip) FROM visits WHERE id = '{$id}' AND WHERE ip ='{$ip}') as visited,
(SELECT COUNT(ip) FROM visits WHERE id = '{$id}') as pageHits";
$result=mysql_query($query, $connection);
$row=mysql_fetch_array($result);
$pageHits=$row['pageHits'];
$visited=$row['visited']; //it's either 0 or 1;
if($visited==0){
$query ="INSERT INTO visits (ip , id) VALUES ('{$ip}', {$id})"
$result=mysql_query($query, $connection);
$pageHits++;
}
echo $pageHits;
答案 0 :(得分:0)
很大程度上取决于您的用例。对于内部网络中的平凡计数器,这可能就足够了。
虽然我不太清楚" pageHits"实际上很重要似乎是我不会打电话的唯一身份访问者的数量" pageHits"。
对于每个人都可见的网站,这种方法存在问题。一个显而易见的问题是通过" id"参数。
当然,有很多库可以进行这种计算,并且具有不同程度的复杂性。如果没有进一步的细节和实际用例,很难判断您是否需要编写更复杂的代码。
答案 1 :(得分:0)
我甚至不会检查数据库中的现有条目。
在UNIQUE
和ip
(合并)上添加id
密钥,然后运行INSERT IGNORE
:
$ip=$_SERVER['REMOTE_ADDR'];
$id=$_GET['id'];
$query = 'INSERT IGNORE INTO visits (ip, id) VALUES ('.$ip.', '.intval($id).')';
mysql_query($query, $connection);
// and now select the visits:
$query = 'SELECT COUNT(ip) as pageHits FROM visits WHERE id = '.intval($id);
$result = mysql_query($query, $connection);
list($pageHits) = mysql_fetch_array($result);
echo $pageHits;