2016-08-14 20 views
1

我想建立一個推介系統,很簡單,但困難的部分是,我想只使用SQL查詢非常有限的PHP,這裏是我極度跛腳企圖:只使用mysql的推介系統

IF EXISTS(SET @UID=userid FROM tbl_users WHERE username = 'seang' 
    THEN 
     BEGIN 
      UPDATE tbl_profile 
       SET refcount=refcount+1 
      WHERE userid = SELECT @UID 
      AND UPDATE tbl_profile SET referrer= SET @UID 
     END; 
ENDIF; 

很明顯,這是非常錯誤的,但我仍然嘗試:/ 這是我想要做的,用英語。檢查是否存在引用新用戶的用戶的用戶名(seang提及他/她),如果seang確實存在,我們會將他的引用次數增加1,並將新用戶引用者設置爲seang的用戶ID。 seang的用戶名和用戶ID存儲在tbl_users中,他的推薦計數存儲在tbl_profile中。 seang的userid也在tbl_profile表中。

回答

2

使用存儲過程對這樣的事情是大量超殺考慮,你可以用一個簡單的UPDATE聲明做到這一點:

UPDATE tbl_profile r, tbl_users u, tbl_profile p 
    SET p.refcount=p.refcount+1, 
     r.referrer=u.userid 
    WHERE r.referrer IS NULL 
    AND p.userid=u.userid 
    AND u.username=? 
    AND r.userid=? 

哪裏?是你的用戶名的佔位符值和第二個佔位符是針對被推薦用戶的用戶標識。

此查詢演示了爲什麼這不是一個好主意要嚴重依賴SQL來做事情。當您嘗試並停留在SQL域中時,這會呈指數級增長。

請記住,沒有理由對此僅使用「僅SQL查詢」。應用程序層非常重要,通常是執行某些操作(如將用戶名解析爲ID值)的更好的地方。

考慮:如果有一天您的用戶和配置文件表存儲在不同的數據庫服務器上,大多數ORM將自動處理,但您的僅SQL代碼將停止工作。

+0

這會增加'refcount'並設置'tbl_profile'表中當前沒有'referrer'集的所有用戶的'referrer'。 OP想更新* refer *用戶檔案的'refcount',並在*新用戶的檔案中設置'referrer'。 – eggyal

+0

啊,我忘了一個條件。讓我編輯。原始查詢還爲每個人設置引用者信息,這可能是超級錯誤的。 – tadman

+0

現在它增加了引用鏈接的配置文件的refcount(正確),但是也將該用戶的「引用者」設置爲他自己(不正確),並且只有當該用戶的引用者以前是NULL時(不正確)。 – eggyal