如何使用来自不同表的数据来获取MySQL中的相应记录

时间:2013-02-12 16:32:01

标签: php mysql sql

我目前有一个PHP生成的日历,为用户显示一些假期。此信息存储在数据库中,即holidaysusers。我希望用户能够选择一个部门,然后AJAX将仅为该部门的用户加载假期。

以下是两个具有相同基本结构的组合表:

users

+------------------------------------+
| User       | Department            |
|------------+-----------------------|
| Brian      | Sales                 |
| Tony       | Marketing             |
| Carol      | Marketing             |
| Dave       | Warehouse             |
| Chris      | Warehouse             |
+------------------------------------+

holiday

+------------------------------------+
| ID         | User                  |
|------------+-----------------------|
| 1          | Dave                  |
| 2          | Tony                  |
| 3          | Tony                  |
| 4          | Chris                 |
| 5          | Carol                 |
+------------------------------------+

我当前的查询:

$getAllHols = $con->query("SELECT * FROM `holiday`");

当然,这只是假期。我已经足够了解PHP以获取特定部门中的用户列表,然后在另一个查询中使用该列表来为这些用户获取假期。但我不想这样做。我认为必须有一个纯SQL解决方案。所以我需要查询来使用这两个表来获取用户在所选部门中的假期的所有记录。

即:

如果我选择了部门"营销",将返回记录2,3和5。 (Tony和Carol在营销部门)。

高级SQL用户非常容易出问题,我确定,但不是我。有人可以帮忙吗?感谢。

3 个答案:

答案 0 :(得分:2)

试试这个。

SELECT * FROM users 
LEFT JOIN holiday ON users.user = holiday.user
WHERE holiday.department = 'marketing'

答案 1 :(得分:0)

据我所知......

select user
from users inner join holiday
on users.user = holiday.user
where department = 'Marketing'

答案 2 :(得分:0)

如果Users表中有任何匹配的记录,这将提供Holiday表中的不同记录列表。这改进了加入表的选项,因为您不必担心对结果数据进行重复数据删除。

select distinct h.id, h.user
  from holiday h
 where h.user in (select u.user
                    from user u
                   where u.department = 'Marketing')
 ;