使用JOIN和关联ID从两个表中选择和显示日期

时间:2017-01-13 19:07:32

标签: php mysql

我在一个MySQL表中有一个员工列表,在另一个MySQL表中有一个分配列表。

员工列表包含以下4个字段:

+––––––––––––––––––––––––––––––––––––––––––––––
| userid | emp_name | emp_email    | emp_role |
–––––––––––––––––––––––––––––––––––––––––––––––
|   4    |   Jane   | emp@emp.com  |   admin  |
–––––––––––––––––––––––––––––––––––––––––––––––
|   5    |   John   | emp2@emp.com |   guest  |
–––––––––––––––––––––––––––––––––––––––––––––––

assignments表格中,我有一份工作清单

+–––––––––––––––––––––––––––––––––––––––––––––––––––
| userid | job_name |   job_numb   |    due_date   |
––––––––––––––––––––––––––––––––––––––––––––––––––––
|   4    |   Job1   | 012221200000 |   01/21/2017  |
––––––––––––––––––––––––––––––––––––––––––––––––––––
|   5    |   Job2   | 012221200001 |   01/24/2017  |
––––––––––––––––––––––––––––––––––––––––––––––––––––

我想要的是让两个表中的所有信息都可以访问数据。我最初写的是:

<?php
$conn = mysqli_connect($servername, $username, $password, $dbname);
    // Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
    }
$sql = "SELECT * FROM assignments JOIN employees";
$results = mysqli_query($conn, $sql);
    ?>

然后循环:

<table>

<?php
    foreach ($results as $result){
        $userid = $result['userid'];
        $emp_name = $result['emp_name'];
        $emp_email = $result['emp_email'];
        $emp_role = $result['emp_role'];
        $job_name = $result['job_name'];
        $job_numb = $result['job_numb'];
        $due_date = $result['due_date'];

    <tr>
        <td><?php echo $emp_name;?></td>
        <td><?php echo $emp_email;?></td>
        <td><?php echo $emp_role;?></td>
        <td><?php echo $job_name;?></td>
        <td><?php echo $job_numb;?></td>
        <td><?php echo $due_date;?></td>
?>
<?php
    }
?>
</table>

当然,这只是输出一切。我无法理解如何将表1和表2中的数据联系起来,因此我得到的是与该作业相关联的员工的电子邮件和姓名。有没有办法在foreach语句中有条件?

2 个答案:

答案 0 :(得分:2)

就我所见,您忘记了JOIN条件(a.userid = e.userid)。如果在SQL语句的WHERE子句中没有这个条件,您将从两个表中获得cross product个所有元组。

请尝试以下声明:

SELECT * FROM assignments a JOIN employees e WHERE a.userid = e.userid;

请注意,为了简明起见,我为两个表引入了别名。

答案 1 :(得分:1)

没有任何JOIN条件的简单ON就像执行两个表的cartesian product一样。您需要在查询中使用ON作为连接条件。所以你的查询应该是这样的:

$sql = "SELECT * FROM assignments JOIN employees ON employees.userid = assignments.userid";