[英]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_time
和start_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.