簡體   English   中英

使用MySQL限制每天發送的訪問者

[英]Using MySQL to Limit Visitors Sent Per Day

我正在建立一個使用PHP和MySQLi的網站。 該網站將流量出售給其他網站所有者。 這是我監視活動廣告系列的表格的結構:

id  url                     hits_ordered    hits_sent   status
1   http://google.com       1000            120         'Active'
2   http://facebook.com     3000            2421        'Inactive'
3   http://yahoo.com        400             12          'Active'

我想做的是讓人們可以選擇在1-90天內傳播點擊量,這樣一來,他們就不會立即被全部淹沒。 因此,我將結構更改為:

id  url                     hits_ordered    hits_sent   period      status
1   http://google.com       1000            120         25          'Active'
2   http://facebook.com     3000            2421        20          'Inactive'
3   http://yahoo.com        400             12          60          'Active'

period表示廣告系列應分散的天數。

但是我認為最好添加兩列,一列顯示活動開始的時間( start_time )和活動應該何時結束( end_time )。

如果我有開始和結束列,那么MySQL是否可以通過數學方法計算出廣告活動是否落后於計划並選擇了它?

例如,如果某人訂購了10,000個匹配,並希望他們在5天內交付。 如果在第4天,他們只有2000次點擊,顯然這將“落后於計划”,因為它應該具有8000-10000次點擊。

我知道我可以使用PHP來計算。 我只是想弄清楚是否有一種方法可以使用純MySQL來選擇所有落后於計划的行。

似乎應該有一種查詢這些行的方法,因為MySQL可以執行數學運算,知道發送的總點擊數,總金額順序以及開始/結束日期。

================

下面是@ICE的另一個示例。 該行將落后於計划:

id  url                     hits_ordered    hits_sent   start_date              end_date
1   http://google.com       1000            5           2016-12-23 00:00:00     2016-12-28 00:00:00

落后是因為自23日訂購以來僅發送了5次匹配。 現在是25日,到28日結束。 因此,根據我上面的邏輯,應將其視為“落后於進度”。

並且此行不會是:

id  url                     hits_ordered    hits_sent   start_date              end_date
1   http://google.com       1000            999         2016-12-23 00:00:00     2016-12-28 00:00:00

在此示例中,日期相同,但是已發送1000個匹配中的999個。 這不會落后於時間表。

無需專欄period 創建end_timestart_time作為DATETIME 之后,您可以使用datediff選擇它們。 它返回兩個日期之間的天數差異:

select * from TABLE where
datediff(end_time,start_time) > datediff(now(),start_time) and
datediff(now(),start_time)>3 and //just select rows with more than 3 days after start_time. This can help to have more logical result as you want
hits_sent + (datediff(end_time,now()) * (hits_send/datediff(now(),start_time))) + 20 < hits_ordered //means count hits happened + we guess this much hits can happen on remaining days based on the remaining days and hits_send + fluctuation < what they ordered

講解

直到現在每天點擊

hits_send/datediff(now(),start_time)

剩余的日子

datediff(end_time,now())

根據現在幾天前發生的情況,我們可以猜測剩下的日子可能會發生如此多的打擊

(datediff(end_time,now()) * (hits_send/datediff(now(),start_time))) + 20

+20是波動。 我們猜想也許有一天他們還會有20首熱門歌曲。

如果hits_sent的百分比高於campain持續時間百分比,則可以比較剩余匹配的百分比和campain的天百分比,只需使用布爾表達式禁用它即可。

select *,((hits_sent/hits_ordered)<datediff(now(),start_date)/datediff(end_date,start_date)) as active, (((hits_sent/hits_ordered))/(datediff(now(),start_date)/datediff(end_date,start_date)) ) as status from orders where 1 order by active desc

SQLFIDDLE中,給出活動的或沒有活動的戰役,並給您一個數字,該數字表示戰役是否已按計划(接近1)低於時間表(接近0)且高於1(如果已經完成)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM