2011-12-17 50 views
1

我问过这个问题,但不得不normalze甚至有机会计算出这个mysql加入的条件

我被困在查询。一位主管(7的ID可以说)将职位发布到职位表上。当他发布帖子时,他为该帖子设置了0-4的组级别......所有这些都保存在作业表中。现在我想要在页面上显示这些内容

如果作业relevant_group设置为0,则允许任何人查看它。如果工作相关组未设置为0,那么我们需要抓住观众会话employee_id,并使用它来查看他们是否在该主管的其中一个组中

因此,如果员工登录并且他的ID是在该主管的团队记录之一中...然后我想显示该职位列表。员工可以与其他监管其他群体,但我只是想显示工作,如果他们是由job_lister_id张贴在工作表中的job_lister_id和supervisor_id在组表的组中的将是相关配套领域

jobs table 
job_listing (text I want displayed in this field) 
job_lister_id (int same as supervisor_id in table below) 
relevant_group (enum 0,1,2,3,4) 

groups table 
supervisor_id (int same as job_lister_id in table above) 
group_number (data will either be 1,2,3 or 4) 
employee_id (int id number of employee) 

所以现在我需要呼应的所有记录

SELECT * FROM jobs 
    - if relevant_group == 0, go ahead and echo that one 
    - if relevant_group != 0 
    - I need to see if the users session id is in a record for the supervisor for that group in groups table 
    - if it is echo it, else skip it 

回答

0

未来,请尝试发布您自己的尝试,在您的问题中解决类似问题。它有助于我们更好地看到你想要做的事情。除非你不确定从哪里开始,所以希望这可以帮助你。

您的第一个“IF”非常容易:我有一个WHERE来检查relevant_group是否为零。您声明只有当relevant_group不为零时才想获得组信息,所以我决定使用左连接更合适(假设“组”表中没有组的group_number为零的行)。

您的第二个“IF”对我来说并没有太多意义:“用户会话ID在组表中的该组的主管的记录中”。但是我看到了这个要求:“job_lister_id(int与下表中的supervisor_id相同)”,并假定这是您想要检查的内容。在这种情况下,带有“LEFT JOIN”的“SELECT *”将返回结果集中的g.employee_id。

SELECT * 
FROM jobs j 
LEFT JOIN groups g ON g.group_number = j.relevant_group 
WHERE j.relevant_group = 0 
OR (g.supervisor_id = j.job_lister_id AND g.employee_id = :employee_id) 

尝试搞砸那个,看看它是否有助于你开始。如果您需要更多帮助,请使用您尝试过的SQL和您看到的结果编辑您的文章。

+0

布赖斯,你的SQL缺少活动用户ID – Richard 2011-12-17 18:50:33

+0

检查。我已将employee_id添加为绑定变量。 – Aaron 2011-12-17 18:58:37

+0

ahhhh!揍你,那就是我所需要的。我不得不从enum更改我的relevant_groups,因为它不能正常工作 – 2011-12-17 19:30:42

0

不太清楚你想要什么,但我认为你正在寻找一个SQL?

我认为这将是最好有2个查询,1为登录用户和1对未登录

登录:。

SELECT j.* 
     FROM jobs j 
INNER JOIN groups g ON g.group_number = j.relevant_group 
    WHERE g.employee_id = 123 #Pull this from somewhere 
     OR relevant_group = 0 

您将需要添加的用户ID在上面的SQL

未登录

SELECT * 
     FROM jobs 
    WHERE relevant_group = 0 

您对表和列的命名也不太好。

+0

是的,一个查询。不知道如何添加检查组号是否为0,没有组为零,所以我想要一个总是回显 – 2011-12-17 18:23:20

+0

我已编辑我的答案上面 – Richard 2011-12-17 18:45:06