我已经问过一次,但是不得不规范化甚至有机会弄清楚这个

我被困在一个查询上。主管(id为7的主管)将作业发布到作业表。发布时,他将该发布设置为0-4的组级别...所有保留在作业表中。现在我想在页面上显示这些

如果作业related_group设置为0,则任何人都可以看到它。如果作业related_group未设置为0,则我们需要获取查看者会话employee_id,并使用该会话来查看他们是否在该主管的某个组中

因此,如果该雇员已登录并且其ID在该主管的组记录之一中,那么我想显示该工作清单。员工可能与其他主管一起在其他组中,但是我只想显示该职位,如果他们在由job_lister_id发布的组中,而Jobs表中的job_lister_id和groups表中的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

最佳答案

将来,请尝试发表自己的尝试来解决问题。它可以帮助我们更好地了解您要做什么。当然,除非您不确定从哪里开始,否则希望它将对此有所帮助。

您的第一个“ IF”非常简单:我有一个WHERE来检查related_group是否为零。您说过,您只想在related_group不为零的情况下获取组信息,因此我认为LEFT联接将更合适(假设“ groups”表中没有group_number为零的行)。

您的第二个“ IF”对我而言并没有太大的意义:“用户会话ID在组表中该组主管的记录中”。但是我看到了这个要求:“ job_lister_id(与下表中的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以及看到的结果来编辑您的帖子。

关于mysql - mysql加入条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8546746/

10-11 01:25