我正在开发一款需要将人们聚集在一起的应用。每个人只能与另一个人匹配..因此,在下表中我试图使其与user1& user2在两个字段中都是唯一的:
CREATE TABLE `match_table` (
`user1` int(11) NOT NULL,
`user2` int(11) NOT NULL,
UNIQUE KEY `user2` (`user2`),
UNIQUE KEY `user1` (`user1`))
因此,例如,以下INSERT语句应忽略第2行和第4行。或者至少我需要能够标记要忽略的行。请注意,第5行是正常的,因为第2行和第4行已被忽略。
INSERT IGNORE INTO match_table (user1, user2)
VALUES
(1,2),
(2,3),
(4,5),
(6,4),
(3,6)
是否有任何索引可以实现此目的? ..否则在插入后我可以做一些更新,可以标记我想忽略的那些?
答案 0 :(得分:3)
假设匹配没有方向,您可以使用现有的表设计,但将匹配存储在表中:
INSERT IGNORE INTO match_table (user1, user2)
VALUES
(1,2),
(2,1),
(2,3),
(3,2),
(4,5),
(5,4),
(6,4),
(4,6),
(3,6),
(6,3)
如果您只是获取所有行,您将获得每次匹配两次。你可以按照以下方式避免这种情况:
SELECT * FROM match_table WHERE user1 < user2
1, 2
3, 6
4, 5
此设计的一个潜在问题是可以与匹配自己的用户插入一行。
答案 1 :(得分:0)
如果您只是要求数据库约束,可以使用UNIQUE INDEX('user1','user2')