php实现人脉
PHP实现人脉系统的基本思路
使用PHP构建人脉系统需要考虑用户关系管理、社交互动和数据存储。以下是实现的关键步骤:
数据库设计
创建用户表和关系表是基础:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
CREATE TABLE relationships (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
friend_id INT NOT NULL,
status ENUM('pending', 'accepted', 'blocked') DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (friend_id) REFERENCES users(id)
);
添加好友功能
实现发送好友请求的逻辑:

function sendFriendRequest($userId, $friendId) {
// 检查是否已存在关系
$existing = checkExistingRelationship($userId, $friendId);
if (!$existing) {
$query = "INSERT INTO relationships (user_id, friend_id, status)
VALUES (:user_id, :friend_id, 'pending')";
// 执行数据库操作...
return true;
}
return false;
}
处理好友请求
接受或拒绝请求的实现:
function respondToRequest($userId, $friendId, $action) {
if ($action === 'accept') {
$query = "UPDATE relationships SET status = 'accepted'
WHERE user_id = :friend_id AND friend_id = :user_id";
// 执行数据库操作...
// 同时创建反向关系记录
createReverseRelationship($userId, $friendId);
} else {
// 拒绝或删除请求
deleteRelationship($friendId, $userId);
}
}
获取人脉列表
查询用户的人脉关系:

function getConnections($userId) {
$query = "SELECT u.* FROM users u
JOIN relationships r ON (u.id = r.friend_id OR u.id = r.user_id)
WHERE (r.user_id = :user_id OR r.friend_id = :user_id)
AND r.status = 'accepted'
AND u.id != :user_id";
// 执行查询并返回结果...
}
人脉推荐算法
基于共同好友的简单推荐:
function recommendConnections($userId) {
$query = "SELECT u.*, COUNT(*) AS common_friends FROM users u
JOIN relationships r1 ON (u.id = r1.user_id OR u.id = r1.friend_id)
JOIN relationships r2 ON (r1.user_id = r2.friend_id OR r1.friend_id = r2.user_id)
WHERE (r2.user_id = :user_id OR r2.friend_id = :user_id)
AND u.id != :user_id
AND NOT EXISTS (
SELECT 1 FROM relationships r3
WHERE (r3.user_id = :user_id AND r3.friend_id = u.id)
OR (r3.friend_id = :user_id AND r3.user_id = u.id)
)
GROUP BY u.id
ORDER BY common_friends DESC
LIMIT 10";
// 执行查询并返回推荐列表...
}
安全考虑
实现人脉系统时需注意:
- 验证所有用户输入防止SQL注入
- 实施CSRF保护措施
- 检查用户权限确保只能操作自己的关系
- 对敏感数据实施适当的访问控制
性能优化
对于大型社交网络:
- 考虑使用缓存机制存储频繁访问的关系数据
- 对数据库查询添加适当索引
- 可能考虑使用图数据库处理复杂关系
这些基本组件可以扩展为完整的社交网络系统,根据需求添加消息功能、活动流或更复杂的推荐算法。






