我是一种登录系统,用户可以彼此添加,但是当两个用户彼此添加时,我们希望以不同的格式/颜色显示它们。 例如:一个用户登录并想要添加其他用户。 如果当前登录的用户将某人添加到系统中,并且该用户也添加了该当前登录的用户,那么我们要以不同的格式显示他们两个。
在以下情况下会变得清楚。
我有两个表,一个是user
user,另一个是userdata
userdata。
id
列是user
中的主键,userdata
中的外键是adder
。
当结构是这样的时候,我想将数据插入称为user
的表中。
user
id name
1 Alice
2 Bob
3 jhon
userdata
adder added
1 2
1 3
userdata
表显示用户 Alice添加了Bob ,并且 Alice添加了jhon ,因此只要userdata
中已经存在一个关系,例如
1 2 i.e (**Alice added Bob**)
并且从前端开始填充的第二行显示
2 1 i.e (**Bob added Alice**)
因此,当这种情况发生时,即爱丽丝(Alice)添加了鲍勃(Bob),反之亦然,我想将它们插入到数据库中并以不同的方式显示它们。
答案 0 :(得分:0)
您正在寻找JOIN。
如果您想知道谁添加了谁,可以使用此查询
模式(MySQL v5.7)
CREATE TABLE users
(
id INT(6) AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE userdata
(
adder INT(6) NOT NULL,
added INT(6) NOT NULL,
CONSTRAINT adder_user FOREIGN KEY (adder) REFERENCES users(id),
CONSTRAINT added_user FOREIGN KEY (added) REFERENCES users(id),
PRIMARY KEY (adder, added)
);
INSERT INTO users VALUES (default, "Alice"), (default, "Bob"), (default, "John");
INSERT INTO userdata VALUES (1, 2), (1, 3), (2, 3), (2, 1);
查询#1
SELECT aer.name AS Adder, 'added' AS Action, aed.name AS Added
FROM users aer
INNER JOIN userdata ud ON aer.id = ud.adder
INNER JOIN users aed ON aed.id = ud.added
WHERE
(
SELECT COUNT(*)
FROM userdata uda
WHERE uda.adder = ud.added
AND uda.added = ud.adder
) >= 1;
输出:
| Adder | Action | Added |
| ----- | ------ | ----- |
| Bob | added | Alice |
| Alice | added | Bob |