【问题标题】:foreign key how to use join with 3 tables外键如何使用连接 3 个表
【发布时间】:2016-03-13 13:03:17
【问题描述】:

我正在尝试列出注册到特定 cursus 的所有用户的列表,我一直在研究联接查询,但我无法弄清楚它是如何工作的,而且到目前为止所有的尝试都不起作用。这是我到目前为止所拥有的:

      <?php
        $cursus2 = mysqli_fetch_array(mysqli_query($con, "SELECT * FROM cursus JOIN Cursist"));
        $result = mysqli_query($con, $cursus2);
        $amount = mysqli_affected_rows($con);

        for ($i = 0; $i < $amount; $i++) {
          $Cursist = mysqli_fetch_array($result);

        echo $Cursist['username']. "<br />";
      }?>

我想要输出所有与桥表中的 cursus 相关的用户名。

数据库结构:

**Cursist Table**     
-------------
id    username
-------------
1     name1
2     name2
3     name3
4     name4

**cursus Table**
-------------
id    name
-------------
1     PHP
2     JAVA
3     HTML
4     RUBY

**Bridge**
-------------
Cursus_cursusCode    Cursist_id
-------------
1     1
1     2
1     3
1     4
2     1
2     2
3     3
3     4
4     1
4     2

我认为关闭的查询是这个:

SELECT * FROM cursus 
JOIN cursist ON cursist.id=cursus.cursus_cursusCode 

【问题讨论】:

    标签: php mysql database foreign-keys


    【解决方案1】:

    你需要两个连接,而不是一个:

    SELECT *
    FROM Cursist t
    INNER JOIN Bridge b
     ON(t.id = b.cursist_id)
    INNER JOIN Cursos s
     ON(b.Cursus_cursusCode = s.id)
    

    如果您只对用户名感兴趣,则无需从 cursus 表中选择任何内容,因此您可以这样做:

    SELECT t.username 
    FROM Cursist t
    INNER JOIN Bridge b
     ON(t.id = b.cursist_id)
    

    也可以用 EXISTS() 来完成:

    SELECT t.user_name
    FROM Cursist t
    WHERE EXISTS(SELECT 1 FROM Bridge B
                 WHERE t.id = b.cursist_id)
    

    【讨论】:

      【解决方案2】:

      试试:

      SELECT c2.username,c1.name 
      FROM bridge b, cursus c1, Cursist c2
      WHERE b.Cursus_cursusCode=c1.id AND b.Cursist_id=c2.id
      

      您可以查看here

      【讨论】:

      • 首先,它的答案和我的一样,唯一的区别是你错误地为他提供了不应该使用的隐式连接语法!回答问题时,请仅使用 EXPLICIT 连接语法!
      • 恭喜! @sagi,但您必须改进第 5 行查询:INNER JOIN Cursos s,Cursos 表不存在,当您发布查询时,我正在执行 sqlfiled。我只是想帮忙
      猜你喜欢
      • 2022-08-02
      • 2015-02-20
      • 2012-03-29
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多