」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 我該如何使用 PHP 和 MySQL 解決具有挑戰性的後端問題

我該如何使用 PHP 和 MySQL 解決具有挑戰性的後端問題

發佈於2024-07-31
瀏覽:125

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]刪除
最新教學 更多>
  • Java字符串非空且非null的有效檢查方法
    Java字符串非空且非null的有效檢查方法
    檢查字符串是否不是null而不是空的 if(str!= null && str.isementy())二手: if(str!= null && str.length()== 0) option 3:trim()。 isement(Isement() trim whitespace whites...
    程式設計 發佈於2025-07-03
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-07-03
  • 如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    將pandas dataframe列轉換為dateTime格式示例:使用column(mycol)包含以下格式的以下dataframe,以自定義格式:})指定的格式參數匹配給定的字符串格式。轉換後,MyCol列現在將包含DateTime對象。 date oped filtering > = ...
    程式設計 發佈於2025-07-03
  • 如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    程式設計 發佈於2025-07-03
  • 為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    查詢模式實現缺失:解決“無法找到”錯誤在Silverlight應用程序中,嘗試使用LINQ建立LINQ連接以錯誤而實現的數據庫”,無法找到查詢模式的實現。”當省略LINQ名稱空間或查詢類型缺少IEnumerable 實現時,通常會發生此錯誤。 解決問題來驗證該類型的質量是至關重要的。在此特定實例...
    程式設計 發佈於2025-07-03
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-07-03
  • 查找當前執行JavaScript的腳本元素方法
    查找當前執行JavaScript的腳本元素方法
    如何引用當前執行腳本的腳本元素在某些方案中理解問題在某些方案中,開發人員可能需要將其他腳本動態加載其他腳本。但是,如果Head Element尚未完全渲染,則使用document.getElementsbytagname('head')[0] .appendChild(v)的常規方...
    程式設計 發佈於2025-07-03
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-07-03
  • 如何解決AppEngine中“無法猜測文件類型,使用application/octet-stream...”錯誤?
    如何解決AppEngine中“無法猜測文件類型,使用application/octet-stream...”錯誤?
    appEngine靜態文件mime type override ,靜態文件處理程序有時可以覆蓋正確的mime類型,在錯誤消息中導致錯誤消息:“無法猜測mimeType for for file for file for [File]。 application/application/octet...
    程式設計 發佈於2025-07-03
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-07-03
  • Java中如何使用觀察者模式實現自定義事件?
    Java中如何使用觀察者模式實現自定義事件?
    在Java 中創建自定義事件的自定義事件在許多編程場景中都是無關緊要的,使組件能夠基於特定的觸發器相互通信。本文旨在解決以下內容:問題語句我們如何在Java中實現自定義事件以促進基於特定事件的對象之間的交互,定義了管理訂閱者的類界面。 以下代碼片段演示瞭如何使用觀察者模式創建自定義事件: args...
    程式設計 發佈於2025-07-03
  • Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    在ASP.NET async void void async void void void void void void void的設計無需返回asynchroncon而無需返回任務對象。他們在執行過程中增加未償還操作的計數,並在完成後減少。在某些情況下,這種行為可能是有益的,例如未期望或明確...
    程式設計 發佈於2025-07-03
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-07-03
  • 將圖片浮動到底部右側並環繞文字的技巧
    將圖片浮動到底部右側並環繞文字的技巧
    在Web設計中圍繞在Web設計中,有時可以將圖像浮動到頁面右下角,從而使文本圍繞它纏繞。這可以在有效地展示圖像的同時創建一個吸引人的視覺效果。 css位置在右下角,使用css float and clear properties: img { 浮點:對; ...
    程式設計 發佈於2025-07-03
  • 如何處理PHP文件系統功能中的UTF-8文件名?
    如何處理PHP文件系統功能中的UTF-8文件名?
    在PHP的Filesystem functions中處理UTF-8 FileNames 在使用PHP的MKDIR函數中含有UTF-8字符的文件很多flusf-8字符時,您可能會在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    程式設計 發佈於2025-07-03

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3