網(wǎng)站需要邀請(qǐng)好友的功能模組,流程是這樣的:
用戶中心產(chǎn)生每個(gè)人(A)的邀請(qǐng)鏈接,然後被邀請(qǐng)人(B)點(diǎn)擊註冊(cè)之後,B的註冊(cè)字段後面插入A的ID作為標(biāo)記。
目前這樣可以統(tǒng)計(jì)出每個(gè)人邀請(qǐng)的好友列表,但後續(xù)有以下問題:
被邀請(qǐng)人B首次下單,會(huì)獎(jiǎng)勵(lì)A(yù) 10%的積分獎(jiǎng)勵(lì),非首次下單,不於獎(jiǎng)勵(lì)
(我自己笨方法是這麼想的,每一個(gè)用戶下單時(shí)候,都先判斷是否有上級(jí)A用戶,如果沒有就直接下單,如果有上級(jí)A用戶,就要再判斷一次是否首次下單,然後再將積分增加給上級(jí),並且同時(shí)進(jìn)行B用戶的下單操作)
那麼問題就是,我自的笨方法需要對(duì)每一個(gè)用戶的每一次下單進(jìn)行首次下單的判斷,感覺這樣的過於累贅,容易出現(xiàn)問題,不知道大神有沒有優(yōu)化思路
我覺得可以這樣搞:
好友關(guān)係:可以單獨(dú)搞一個(gè)表,好友關(guān)係表
,裡面存兩個(gè)欄位 uid
(用戶ID), contact_uid
(關(guān)聯(lián)好友ID)
下單是否是首次並增加推薦好友積分操作:可以在用戶相關(guān)表增加個(gè)是否下過單的字段(樓上也有提過),默認(rèn)為0為沒有下過單,每次下單都會(huì)先查詢這個(gè)字段,如果是1
則走正常下單邏輯;如果為0,表示從未下過單,然後執(zhí)行你將要用到的邏輯,就是用戶是否有推薦人,給推薦人增加積分等的處理
一個(gè)用戶下單時(shí)候,都先判斷是否有上級(jí)A用戶,如果沒有就直接下單
不要這樣做,會(huì)影響性能。
統(tǒng)計(jì)積分在每天凌晨統(tǒng)計(jì)。
可以提出一張表,這張表有id,B的id,C的id,以及字段buystate,buystate的值可以取1或者0,0代表不是第一次購買,1代表是第一次購買
直接加上一個(gè)字段,是否下單過,預(yù)設(shè)為0,反正下單的時(shí)候會(huì)獲取這個(gè)用戶的信息,順便判斷一下是不是等於0就知道是不是首單了。積分方面,如果擔(dān)心效能,可以考慮存到redis裡,固定一個(gè)時(shí)間修改資料庫。
我覺得思路沒問題
有一點(diǎn)提一下,獎(jiǎng)勵(lì)積分應(yīng)該要在訂單完成後吧,而不是下單的時(shí)候。
在使用者表加一個(gè)欄位表示歷史完結(jié)單次數(shù)就好了,後續(xù)如果需求改變?yōu)榍癗次返積分也很容易。而且通常下單或完成訂單的過程中本身就需要查詢使用者表,並不顯得繁雜。