如何在SQL中链接这两个表

时间:2018-11-10 15:21:18

标签: php mysql

我是一种登录系统,用户可以彼此添加,但是当两个用户彼此添加时,我们希望以不同的格式/颜色显示它们。 例如:一个用户登录并想要添加其他用户。 如果当前登录的用户将某人添加到系统中,并且该用户也添加了该当前登录的用户,那么我们要以不同的格式显示他们两个。

在以下情况下会变得清楚。

我有两个表,一个是user user,另一个是userdata userdataid列是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),反之亦然,我想将它们插入到数据库中并以不同的方式显示它们。

1 个答案:

答案 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   |

View on DB Fiddle