我没有设计每个关系有两条记录的数据库,而是选择了 1 行。还给自己惹了麻烦!
这是表格:
CREATE TABLE `friends` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id_1` int(11) unsigned NOT NULL,
`status_1` tinyint(1) NOT NULL DEFAULT '0',
`user_id_2` int(11) unsigned NOT NULL,
`status_2` tinyint(1) NOT NULL DEFAULT '0',
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_rela` (`user_id_1`,`user_id_2`),
KEY `user_id_2` (`user_id_2`)
) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8;
我对这个设计有几个问题。
http://www.sqlfiddle.com/#!2/c6ccb8/2
首先,我无法为当前用户选择状态。因为当前用户可以是 user_id_1 或 user_id_2 中的任何位置。
SELECT DISTINCT
friends.friend_id
FROM (
SELECT created,
CASE user_id_1 WHEN 1 THEN user_id_2
ELSE user_id_1
END AS friend_id
FROM friends
WHERE 1 IN (user_id_1, user_id_2)
) friends
ORDER BY friends.created DESC
我面临的第二个问题是当前用户的更新状态。如果他接受友谊,我如何更新 status_1 或 status_2 中的正确值?
这个问题有解决方案吗?还是如果我使用更简单的 AB BA 模式,每个关系有两行会更好?