我正在尝试设置一个推荐系统,非常简单,但困难的部分是我只想使用SQL查询非常有限的PHP,这是我极端蹩脚的尝试:
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表中。
答案 0 :(得分: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=?
其中?
是用户名的占位符值,第二个占位符是引用用户的用户ID。
此查询演示了为什么这样做真的不是一个好主意如此依赖SQL来做事情。当您尝试并保留在SQL域中时,这会变得更加复杂。
请记住,没有理由为此使用“仅SQL查询”。应用程序层很重要,通常是执行某些操作的更好地方,例如将用户名解析为ID值。
考虑一下:如果有一天你的用户和个人资料表存储在不同的数据库服务器上,大多数ORM会自动处理,但你的SQL代码将停止工作。