【问题标题】:Print data from two different tables with a shared field (mysql and php)使用共享字段(mysql 和 php)从两个不同的表中打印数据
【发布时间】:2016-10-02 14:52:25
【问题描述】:

我正在尝试从有共享字段的两个不同表中获取数据: 在表 1 中,我有很多字段,其中一个是员工 Position,它是一个数字。 在 table2 中,我有两个字段:EmpPos(等于 table1 中的 Position)和 PosName。 现在,我想从 table1 打印所有员工的信息,而不是打印 Position(这是一个数字),我想从 table2 打印其关联的 PosName。 我的以下查询不起作用!

$sql ="SELECT * FROM table1, table2 WHERE table1.Position=table2.EmpPos";
$result = $conn->query($sql);

if ($result->num_rows > 0) {

    <tr>
        <th>Name</th>
        <th>Email</th>
        <th>Position Name</th>
        <th>phoneExt</th>

    </tr>";

    while($row = $result->fetch_assoc()) {
        echo "<tr>";
        echo "<td>" .$row['table1.FirstName'] ." " .$row['table1.LastName'] ."</td>";
        echo "<td>" .$row['table1.Email'] ."</td>";
        echo "<td>" .$row['table2.PosName'] ."</td>";
        echo "<td>" .$row['table1.phoneExt'] ."</td>";
        echo"</tr>";
}

提前致谢

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    问题是您没有定义表之间的任何关系。因此,您应该为此使用 INNER 或 LEFT JOIN:

    SELECT * FROM Table1 m INNER JOIN
    Table2 k ON k.EmpPos = m.Position
    

    或者以下应该做的:

    SELECT * FROM Table1 m LEFT JOIN
    Table2 k ON k.EmpPos = m.Position
    

    由于您有一个外键(共享字段),因此使用连接很容易且显而易见。

    【讨论】:

    • 你的意思是我必须在数据库中定义一个外键吗?因为我试过你的代码,它给出了这个错误:(未定义的索引:table1.FirstName)和所有字段都一样
    • 我可以看到,已经定义了一个外键。在这两个表中,您都有一个字段 positionId。根据您的更改表名和列。
    【解决方案2】:

    使用内部连接

    SELECT * FROM table1 tab1 INNER JOIN table2 tab2 ON tab1.position = tab2.EmpPos
    

    【讨论】:

      猜你喜欢
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多