【问题标题】:How to link these two tables in sql如何在sql中链接这两个表
【发布时间】:2018-11-10 15:21:17
【问题描述】:

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

将在以下场景中变得清晰。

我有两张表,一张是useruser,第二张是userdatauserdata。 列iduser 中的主键和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,反之亦然,我想将它们插入数据库并以不同的方式显示它们。如何在 Alice 添加 Bob 和 Bob 添加 Alice 时做出决定。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    JOIN 是您正在寻找的。​​p>

    如果你想知道谁添加了谁,你可以使用这个查询

    架构 (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

    【讨论】:

    • 我只想显示那些相互添加的用户,即如果 Alice 添加了 Bob,反之亦然。但我不知道该怎么做才能知道是的!爱丽丝添加了鲍勃,所以当鲍勃添加她时,它必须向用户显示?因为如果只有一个正在添加,那么他们都在相互添加,然后不要向用户显示@Cid
    • 我正在尝试从过去几个小时解决这个问题,但什么都没有发生,很酷,请弄清楚该怎么做?? @Cid
    • 哦,我明白了,那么您可能需要一个子查询。编辑。
    • 让我检查一下!!但是您使用了'aer'和'aed',我不知道这是做什么用的?你能详细说明一下吗?@Cid
    • 它们是查询 ... FROM users aer ... 中表的别名我将此表命名为 aer (AddER) ... INNER JOIN users aed ... 和此 aed (AddED) 以避免混淆,因为在同一个表上有一个双重联接
    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2021-04-29
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多