我在一个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
语句中有条件?
答案 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";