当前位置: 首页 > 知识库问答 >
问题:

具有Laravel和MySQL的唯一IP计数器

柳坚白
2023-03-14

我想做一个简单的独特的IP计数器的画廊页面视图。

我的想法是将视图记录与2个表中的图像记录分开。

保存图像:idname类别视图

为查看的图像保存访问者ip

此示例屏幕截图显示了3名访问者,每人查看3张图像。我使用免费代理IP。

如果检测到New IP:

名称ip添加到唯一的\u ip
增量gallery→ <代码>名称
→ <代码>视图
1。

$name = "Image 1";
$ip = getenv('REMOTE_ADDR');

// Increment Views if New IP visitor
// Proceed if name + ip record does not exist in table
if (!DB::table('unique_ips')->where('name', '=', $name)->where('ip', '=', $ip)->exists()) { 

    // Add Name/IP Record
    DB::table('unique_ips')->insert([
        ['name' => $name, 'ip' => $ip]
    ]);

    // Views +1 
    DB::table('gallery')
        ->where('name', $name)
        ->increment('views', 1);
}

这个视图计数器可以工作,但是所有唯一的ip记录都被分组在2列下。它必须搜索所有记录才能找到匹配的,这可能会随着数千个ip的出现而变慢。

其他想法

>

每个name都可以有自己的包含ip的列。但那样我就会有成千上万的专栏。

我可以将ip存储在name文本文件中,而不是数据库中。

有更好的设计方法吗?

共有1个答案

夔庆
2023-03-14

起初,用gallery_id来代替有关系的名字会更快。

如果你不想减慢客户端的进程,你可以做排队事件监听器,它将处理检查和向数据库添加记录。

查看以下关于排队事件侦听器的链接

 类似资料:
  • 问题内容: 这个问题需要一些假设的背景。让我们考虑一个有列的表,,,,使用MySQL作为RDBMS。由于如果给定的某个人的名字和出生日期与另一个人相同,那么根据定义,他们就是同一个人(除非有两个巧合,即我们两个人分别于1809年2月12日出生,他们叫亚伯拉罕·林肯),所以我们将上的唯一键,这意味着“不要将同一个人存储两次”。现在考虑以下数据: 如果现在尝试运行以下语句,则该语句应该并且将失败: 如

  • 问题内容: 我有一个这样的表结构: 通过智能查询,我想获取3列: 我在的此解决方案的帮助下提出了我的查询,该查询为我提供了我需要的前两列: 但是,如何将第三列也添加到查询中? 你能帮我么? 问题答案: 正如您自己提到的那样,您可以使用关键字来获取与众不同的。使用获得的计数和获得不同的每个小号 试试这个: 输出:

  • 问题内容: 追溯(最近一次呼叫最近):… AttributeError:“索引”对象没有属性“索引” 如何获得一个数据透视表,其中包含一个DataFrame列与其他两个列 的唯一值 的 计数 ? 是否有独特的计数?我应该使用吗? 注意 我知道“系列”,但是我需要一个数据透视表。 编辑:输出应为: 问题答案: 你的意思是这样吗? 请注意,使用假设您的DataFrame中没有。您可以做,否则可以。

  • 问题内容: 我对数据库表中的唯一行有问题,现在可以这样做: 当我在所有列中使用UNIQUE属性时,即使第二个Moore名称不同,我也会插入第二个Moore错误:/ 如何使用UNIQUE(或INDEX?)在db表中执行类似的操作: 抱歉,如果问题很简单,但是我是sql的初学者,并且在使用UNIQUE之类的UNIQUE时找到一些好的示例时遇到问题:/或者也许我必须在插入新行之前从db中选择一个表并检查

  • 问题内容: 我有一个laravel 模型,该模型在和上具有唯一的验证规则。在我的存储库中,当我更新模型时,我将重新验证字段,以使所需的规则验证没有问题: 测试失败 有没有办法优雅地解决这个问题? 问题答案: 将当前正在更新的实例的追加到验证器。 传递实例的来忽略唯一的验证器。 在验证器中,使用参数来检测您是否正在 更新 或 创建 资源。 如果进行更新,则强制唯一规则忽略给定的id: 如果创建,请照

  • 问题内容: 我有一个具有许多行的mysql表,并且在每一行中都有一个称为“值”的字段,该字段的值在行与行之间会有所不同。我想要的是选择所有行并计算所有“值”字段的总和。 任何的想法? 问题答案: 你是这个意思吗 如果您有多个要返回的列,只需将每个非聚合(即求和)行添加到子句中: