”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 我如何使用 PHP 和 MySQL 解决具有挑战性的后端问题

我如何使用 PHP 和 MySQL 解决具有挑战性的后端问题

发布于2024-07-31
浏览:903

How I Solved a Challenging Backend Problem with PHP & MySQL

大家好,好久没写博文了;好吧,我在这里写的是我遇到的最具挑战性的问题之一,以及我如何解决它的概述。

作为后端开发人员,挑战尤其是那些会让您兴奋的挑战是无法逃避的。最近,在使用 PHP 和 MySQL 开发广告网络时,我遇到了一个与基于特定标准为发布商优化每千次成本 (CPM) 相关的复杂问题。这个问题考验了我的技术能力,并提供了宝贵的学习经验。在这篇文章中,我将向您介绍我如何逐步解决这个问题,重点介绍所面临的挑战和实施的解决方案。如果我能得到有关如何有效实施或更好的方法的建议,我将很高兴。

问题

任务是根据以下标准调整发布商的每千次展示费用:

  1. 如果过去 10 分钟内有来自 10 个不同 IP 地址的点击,则增加 5%。
  2. 如果过去 10 分钟内同一 IP 地址有 5 次点击,则减少 8%。
  3. 如果来自同一国家/地区连续 10 次点击,则增加 2%。

解决方案之旅

第 1 步:了解要求

在开始实施之前,我需要清楚地了解需求。我与利益相关者进行了讨论,以确认调整 CPM 的标准和期望的行为。这第一步对于有效规划解决方案至关重要。

第 2 步:设置数据库

我已经创建了数据库和表,而且该项目已经上线,所以我只需要添加标准。我确保数据库和表已设置为存储和容纳点击跟踪所需的信息。表架构包含用于存储点击时间戳、IP 地址和国家/地区代码的字段(还有其他字段/列,我不会包含这些字段/列,因为它们对于本文的原因并不重要)。

第 3 步:捕获点击数据

接下来,我实现了一个函数,用于在用户点击广告时获取并保存 IP 地址和国家/地区代码。该数据存储在点击表中。

第 4 步:实施标准检查

捕获数据后,下一步是实施逻辑来检查标准并相应地调整 CPM。

  1. 检查唯一的 IP 地址 我使用 COUNT 函数和 DISTINCT 关键字计算过去 10 分钟内的唯一 IP 地址,该关键字计算组中每一行的表达式并返回唯一非空值的数量。
/** 
 * Get the count of unique IP addresses in the last 10 minutes
 */
$stmt = $pdo->prepare("
    SELECT COUNT(DISTINCT ip_address) AS unique_ips
    FROM clicks
    WHERE date_time >= NOW() - INTERVAL 10 MINUTE
");
$stmt->execute();
$unique_ips = $stmt->fetchColumn();

if ($unique_ips >= 10) {
    $cpm *= 1.05;
} else {
    /**
     * Here, I check for clicks from the same IP address
     * This is in the second condition
     * ...
     **/
}
  1. 检查重复的 IP 地址 然后,我使用 SQL COUNT 函数检查过去 10 分钟内是否有重复或不唯一的 IP 地址。
/** 
 * Checking non-unique (repeated) IP addresses in the last 10 minutes
 * If the condition is true, decrease the CPM by 8%
 */
$stmt = $pdo->prepare("
    SELECT ip_address, COUNT(*) AS click_count
    FROM clicks
    WHERE timestamp >= NOW() - INTERVAL 10 MINUTE
    GROUP BY ip_address
    HAVING click_count >= 5
");
$stmt->execute();
$repeated_ips = $stmt->fetchAll();

if (count($repeated_ips) > 0) {
    $cpm *= 0.92;
} else {
    /**
     * Here, I check for consecutive clicks from the same country
     * This is in the third condition
     * ...
     **/
}
  1. 检查来自同一国家/地区的连续点击 在这里,我应用第三个标准,即检查来自同一国家/地区的连续点击。
/** 
 * Checking clicks from the same country consecutively
 * If the condition is true, increase the CPM by 2%
 */
$stmt = $pdo->prepare("
    SELECT country_code
    FROM clicks
    ORDER BY timestamp DESC
    LIMIT 10
");
$stmt->execute();
$last_ten_clicks = $stmt->fetchAll(PDO::FETCH_COLUMN);

if (count(array_unique($last_ten_clicks)) === 1) {
    $cpm *= 1.02;
}

第 5 步:更新每千次展示费用

对于这一部分,我更新发布商的 CPM 并用它来计算他针对该特定点击的收入。

结果

通过实施此解决方案,广告网络现在可以根据用户的点击数据动态调整 CPM。这确保了发布商的公平和优化的收入模式,提高了广告网络的整体效率。

关于我以及为什么选择 HNG 实习?

我是 Kingsley Gbutemu Kefas,一位热衷于构建可扩展且高效系统的后端开发人员。我是一个问题解决者,我喜欢学习新事物和做事的方法。作为一名开发人员,我的动力来自解决挑战,尤其是那些让我批判性思考的复杂挑战。我知道 HNG 实习对我来说是一个通过从事实际项目并向行业专家学习来成长为开发人员的机会。我很高兴能够开始 HNG 实习之旅并为技术社区做出贡献。我相信这次旅程将提高我的技能并为有影响力的项目做出贡献,并且我相信我将从 HNG Premium 的好处中受益更多。

版本声明 本文转载于:https://dev.to/cyberking99/solving-a-challenging-backend-problem-with-php-h0l?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 何时将成功回调函数与 jQuery Ajax 调用分离?
    何时将成功回调函数与 jQuery Ajax 调用分离?
    从 jQuery Ajax 调用解耦成功回调函数使用 jQuery ajax 从服务器检索数据时,通常的做法是定义成功.ajax() 块中的回调函数。这将回调处理与 AJAX 调用紧密结合在一起,限制了灵活性和可重用性。要在 .ajax() 块之外定义成功回调,通常需要声明一个用于存储返回数据的变量...
    编程 发布于2024-11-03
  • 极简设计初学者指南
    极简设计初学者指南
    我一直是干净和简单的倡导者——这是我的思维最清晰的方式。然而,就像生活中的大多数任务一样,不同的工作有不同的工具,设计也是如此。在这篇文章中,我将分享我发现的极简设计实践,这些实践有助于创建干净简单的网站、模板和图形——在有限的空间内传达必要的内容。 简单可能比复杂更难:你必须努力让你的思维清晰,使...
    编程 发布于2024-11-03
  • 了解 React 应用程序中的渲染和重新渲染:它们如何工作以及如何优化它们
    了解 React 应用程序中的渲染和重新渲染:它们如何工作以及如何优化它们
    当我们在 React 中创建应用程序时,我们经常会遇到术语渲染和重新渲染组件。虽然乍一看这似乎很简单,但当涉及不同的状态管理系统(如 useState、Redux)或当我们插入生命周期钩子(如 useEffect)时,事情会变得有趣。如果您希望您的应用程序快速高效,那么了解这些流程是关键。 ...
    编程 发布于2024-11-03
  • 如何在 Node.js 中将 JSON 文件读入服务器内存?
    如何在 Node.js 中将 JSON 文件读入服务器内存?
    在 Node.js 中将 JSON 文件读入服务器内存为了增强服务器端代码性能,您可能需要读取 JSON 对象从文件到内存以便快速访问。以下是在 Node.js 中实现此目的的方法:同步方法:对于同步文件读取,请利用 fs(文件系统)中的 readFileSync() 方法模块。此方法将文件内容作为...
    编程 发布于2024-11-03
  • 人工智能可以提供帮助
    人工智能可以提供帮助
    我刚刚意识到人工智能对开发人员有很大帮助。它不会很快接管我们的工作,因为它仍然很愚蠢,但是,如果你像我一样正在学习编程,可以用作一个很好的工具。 我要求 ChatGpt 为我准备 50 个项目来帮助我掌握 JavaScript,它带来了令人惊叹的项目,我相信当我完成这些项目时,这些项目将使我成为 J...
    编程 发布于2024-11-03
  • Shadcn UI 套件 - 管理仪表板和网站模板
    Shadcn UI 套件 - 管理仪表板和网站模板
    Shadcn UI 套件是预先设计的多功能仪表板、网站模板和组件的综合集合。它超越了 Shadcn 的标准产品,为那些不仅仅需要基础知识的人提供更先进的设计和功能。 独特的仪表板模板 Shadcn UI Kit 提供了各种精心制作的仪表板模板。目前,有 7 个仪表板模板可用,随着时间...
    编程 发布于2024-11-03
  • 如何使用正则表达式捕获多行文本块?
    如何使用正则表达式捕获多行文本块?
    匹配多行文本块的正则表达式匹配跨多行的文本可能会给正则表达式构造带来挑战。考虑以下示例文本:some Varying TEXT DSJFKDAFJKDAFJDSAKFJADSFLKDLAFKDSAF [more of the above, ending with a newline] [yep, t...
    编程 发布于2024-11-03
  • 软件开发中结构良好的日志的力量
    软件开发中结构良好的日志的力量
    日志是了解应用程序底层发生的情况的关键。 简单地使用 console.log 打印所有值并不是最有效的日志记录方法。日志的用途不仅仅是显示数据,它们还可以帮助您诊断问题、跟踪系统行为以及了解与外部 API 或服务的交互。在您的应用程序在没有用户界面的情况下运行的情况下,例如在系统之间处理和传输数据的...
    编程 发布于2024-11-03
  • 如何在单个命令行命令中执行多行Python语句?
    如何在单个命令行命令中执行多行Python语句?
    在单个命令行命令中执行多行Python语句Python -c 选项允许单行循环执行,但在命令中导入模块可能会导致语法错误。要解决此问题,请考虑以下解决方案:使用 Echo 和管道:echo -e "import sys\nfor r in range(10): print 'rob'&qu...
    编程 发布于2024-11-03
  • 查找数组/列表中的重复元素
    查找数组/列表中的重复元素
    给定一个整数数组,找到所有重复的元素。 例子: 输入:[1,2,3,4,3,2,5] 输出:[2, 3] 暗示: 您可以使用 HashSet 来跟踪您已经看到的元素。如果某个元素已在集合中,则它是重复的。为了保留顺序,请使用 LinkedHashSet 来存储重复项。 使用 HashSet 的 Ja...
    编程 发布于2024-11-03
  • JavaScript 回调何时异步?
    JavaScript 回调何时异步?
    JavaScript 回调:是否异步?JavaScript 回调并非普遍异步。在某些场景下,例如您提供的 addOne 和 simpleMap 函数的示例,代码会同步运行。浏览器中的异步 JavaScript基于回调的 AJAX 函数jQuery 中通常是异步的,因为它们涉及 XHR (XMLHtt...
    编程 发布于2024-11-03
  • 以下是根据您提供的文章内容生成的英文问答类标题:

Why does `char` behave differently from integer types in template instantiation when comparing `char`, `signed char`, and `unsigned char`?
    以下是根据您提供的文章内容生成的英文问答类标题: Why does `char` behave differently from integer types in template instantiation when comparing `char`, `signed char`, and `unsigned char`?
    char、signed char 和 unsigned char 之间的行为差​​异下面的代码可以成功编译,但 char 的行为与整数类型不同。cout << getIsTrue< isX<int8>::ikIsX >() << endl; cou...
    编程 发布于2024-11-03
  • 如何在动态生成的下拉框中设置默认选择?
    如何在动态生成的下拉框中设置默认选择?
    确定下拉框中选定的项目使用 标签创建下拉列表时,您可以可能会遇到需要将特定选项设置为默认选择的情况。这在预填写表单或允许用户编辑其设置时特别有用。在您呈现的场景中, 标记是使用 PHP 动态生成的,并且您希望根据值存储在数据库中。实现此目的的方法如下:设置选定的属性要在下拉框中设置选定的项目,您需...
    编程 发布于2024-11-03
  • Tailwind CSS:自定义配置
    Tailwind CSS:自定义配置
    介绍 Tailwind CSS 是一种流行的开源 CSS 框架,近年来在 Web 开发人员中广受欢迎。它提供了一种独特的可定制方法来创建美观且现代的用户界面。 Tailwind CSS 区别于其他 CSS 框架的关键功能之一是它的可定制配置。在这篇文章中,我们将讨论 Tailwin...
    编程 发布于2024-11-03
  • 使用 jQuery
    使用 jQuery
    什么是 jQuery? jQuery 是一个快速的 Javascript 库,其功能齐全,旨在简化 HTML 文档遍历、操作、事件处理和动画等任务。 “少写多做” MDN 状态: jQuery使得编写多行代码和tsk变得更加简洁,甚至一行代码.. 使用 jQuery 处理事件 jQuery 的另一个...
    编程 发布于2024-11-03

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3