Cakephp互惠好友系统
Posted
技术标签:
【中文标题】Cakephp互惠好友系统【英文标题】:Cakephp reciprocal friendship system 【发布时间】:2011-10-14 10:49:36 【问题描述】:我已经尝试了一周左右的时间,如何在 Cakephp 中制作一个合适的友谊系统。我已经阅读了this 和this 线程,但我无法让它工作。
我已经阅读了更多关于此的主题,但似乎没有人有合适的例子。
我目前有一个表 users(id、用户名、密码、电子邮件等)和一个表 Friendships(id、user_to、user_from、status)。
第 1 步 - 好友请求
如果用户发出了友谊请求,则插入一行,其中包含请求的 user_id 和请求友谊的用户的 user_id,因此它可能如下所示:
标识 |用户来自 |用户至|状态
1 | 1 | 2 | 0
这样我可以通过选择 user_to = 2 的所有记录轻松显示 user_id = 2 的待处理朋友
第 2 步 - 确认友谊
我已经设置好让user_id 2现在看到user_id 1想加好友,如果他点击确认链接,状态会变成1,见下
标识 |用户来自 |用户至|状态
1 | 1 | 2 | 1
我创建了各种检查以使行保持唯一。
第 3 步 - 向朋友展示
我认为这很容易,如果我想显示 user_id = 1 的朋友,那么我只需使用 user_from = 1 或 user_to = 1 进行选择,但这不起作用。
User_id 1 可以是请求者,但也可以被请求,所以 JOIN 会显示奇怪的结果。
有人知道解决办法吗?如果我没有做正确的事情,我很高兴重建整个系统!任何正确方向的提示也欢迎......
【问题讨论】:
【参考方案1】:这是我的解决方案:困难在于正确的请求,因为可以跨越好友请求(如果 A 询问 B 或 B 询问 A,则将相反的方式存储在表的“to”和“from”字段中) .让我们这样做,用户 UNION 和别名可以独立于下面的关系表从任何用户那里获取朋友。
-
[friends] 表(关系):to|from|statut(pending,confirmed)
“to”和“from” > foreign_keys 约束到 [users] 表
下面的请求总是给出想要的结果! (将 %d 替换为 SESSION 中的用户 ID 或用户 ID
SELECT
users.userNickname,
friends.to AS friendUser,
friends.from AS currentUser,
friends.statut
FROM
users
INNER JOIN
friends
ON
users.userId = friends.to
WHERE
friends.from = '%d'
UNION
SELECT
users.userNickname,
friends.from AS friendUser,
friends.to AS currentUser,
friends.statut
FROM
users
INNER JOIN
friends
ON
users.userId = friends.from
WHERE
friends.to = '%d'
【讨论】:
【参考方案2】:您可以通过这种方式找到 ID = 1 的好友请求:
select * from Users u1 where u1.user_to = 1 and u1.user_from not in (select u2.user_to
from Users u2 where u2.user_from = u1.user_to)
您可以通过这种方式找到来自 ID = 1 的好友请求:
select * from Users u1 where u1.user_from = 1 and u1.user_to not in (select u2.user_from
from Users u2 where u2.user_to = u1.user_from)
您可以通过这种方式找到 ID = 1 的相互友谊:
select * from Users u1 where ((u1.from = 1) or (u1.to = 1)) and 0 < (select count(*) from
Users u2 where u1.from = u2.to and u1.to = u2.from)
此代码未经测试,但您明白了。
【讨论】:
以上是关于Cakephp互惠好友系统的主要内容,如果未能解决你的问题,请参考以下文章