仅使用mysql作为推荐系统

时间:2016-08-14 09:56:22

标签: mysql

我正在尝试设置一个推荐系统,非常简单,但困难的部分是我只想使用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表中。

1 个答案:

答案 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代码将停止工作。