使用PHP根据用户显示不同的文本,并记录点击率

时间:2016-09-06 17:50:38

标签: php

假设我有一篇文章有​​3个不同的标题:

  • “男人咬狗”
  • “当他接近一只狗时,这个男人将他的下巴拉下来,接下来会发生什么会震惊你!”
  • “只有90岁的孩子会记得那个时候一个人咬人”

我想使用PHP根据当前用户随机显示这三个标题中的一个(因此每次刷新时都没有获得新的标题),然后通过SQL记录每个标题版本的点击次数在哪里我得到类似的东西:

USER HEADLINE CLICK?
1 1无
2 3是
3 2是
4 3无
5 2是
6 1没有

具体来说,我想咨询一下:

  - 检索某种对用户唯一的变量(可能是IP地址?)
  - 根据唯一的用户变量随机分配一个数字(在示例中为1-3)   - 根据分配的号码显示不同的文本。

一旦我弄清楚这部分,我就可以弄清楚SQL的东西了。我感谢您提供的任何建议。

2 个答案:

答案 0 :(得分:1)

这里有三个问题:

  1. 如何不断识别用户
  2. 如何计算用户点击次数(操作)
  3. 如何获得结果统计
  4. 在这里,我认为在一个页面上显示不同的主题不是问题

    问题1

    基本上你可以使用IP地址,但它不是用户的常量id。例如,如果用户使用移动电话和步行,他可以在塔之间切换或松散连接,然后使用不同的IP恢复它。

    有很多方法可以通过网络识别用户,但是没有授权就无法在100%识别用户(用户完成的主动操作)

    例如,您可以使用生成的ID将Cookie设置为用户。您可以轻松生成ID,here。当您设置cookie并且用户将返回给您时,您将知道它是谁并完成您需要的东西。

    同样在用户唯一性范围内,您可以阅读本文 - browser uniqueness

    此外,如果您使用Cookie,则可以轻松存储任务的主题ID。如果您不使用Cookie,我建议您使用mongodb进行此类任务(许多具有小数据的对象,必须非常快速地从db中检索,非常快速地插入到db并且在您的情况下没有更新)

    问题2 您显示的表格包含3个字段:ID,已使用的标题,是否已单击标题。

    在这种表格中,您将失去所有非唯一点击(当用户点击主题两次,明天去那里或多次刷新目标页面时)

    我建议您使用以下表格

    • ID - 这里有一些唯一ID,自动增量字段
    • 日期 - 一段时间的测量(每天,每小时或类似的事情)
    • SubjectID - 显示的主题ID
    • UniqueClicks - 点击主题的用户数量
    • 点击次数 - 主题点击总次数

    在这种情况下,您将按时间段汇总数据,您可以轻松地在管理面板中显示数据

    但我们仍然有收集这些数据的问题。此问题的解决方案取决于用户数量。如果一分钟内点击次数超过1000次,我认为您需要一些日志记录系统。例如,您将所有数据发送到文件'clickLog-' . date('Ymd_H') . '.log'并以某种静态格式将数据发送到此文件,例如:

    clientId;SubjectId;

    当小时结束时,您可以通过shell脚本或代码聚合此数据并将其放入db:

    cat clickLog-20160907_12.log | sort -u | awk -F';' '{print $2}' | sort | uniq -c

    在此代码之后,您将拥有2列数据。首先是唯一点击次数,第二次是主题ID

    修改此脚本只需删除sort -u部分

    即可获得总点击次数

    此外,如果您有多个主题ID,则可以使用for

    执行此操作

    例如,可以跟随唯一点击的bash脚本

     for i in subj1 subj2 subj3; do
    
        uniqClicks=$(cat clickLog-20160907_12.log |
            grep ';'$i'$' | 
            sort -u |
            wc -l);
        clicks=$(cat clickLog-20160907_12.log |
            grep ';'$i'$' | 
            wc -l);
    
        # save data here
     done
    

    在此操作之后,您将准备用于计算的汇总数据和用于将来处理的源数据(如果需要) 而且您的数据库也会小而快,所有源数据都将存储在文件中。

    问题3

    如果您要在问题2 部分中执行解决方案,那么获取统计信息的所有查询都将非常简单,您的数据库将执行非常快速

    例如,您可以在PostgreSQL中运行此查询:

    SELECT 
        SubjectId, 
        sum(uniqueClicks) AS uniqueClicks, 
        sum(clicks) AS clicks
    FROM 
        statistic_table
    WHERE 
        Date BETWEEN '2016-09-01 00:00:00' and '2016-09-08 00:00:00'
    GROUP BY
        SubjectId
    ORDER BY 
        sum(uniqueClicks) DESC
    

    在这种情况下,如果你有3个主题ID和每小时聚合,你将在几周内有504个新行(3个主题* 24小时* 7天),这对于数据库而言确实是少量数据。

    <强>替代

    您还可以使用Google Analytics进行所有计算。但在这种情况下,您需要执行其他一些步骤。其中大多数都是配置步骤,需要在您的网站上启用Google Analytics分析监控脚本。如果您拥有它,您可以轻松配置goals support并使用GA脚本api仅使用subjectid应用脚本附加数据

答案 1 :(得分:0)

您可以使用用户的IP或他的MAC,如果用户在网络上注册,您可以使用用户ID。 对于第二部分,您可以使用PHP函数mt_rand():

mt_rand(min,max) - &gt;如果你想要1到3个用户之间的数字mt_rand(1,3);

使用数组来存储三个不同的标题,并使用ramdomly生成的数字来访问数组。

最好你可以在0-2之间生成一个数字,因为数组以0开头。