mysql连接条件

时间:2011-12-17 17:57:50

标签: mysql join

我曾经问过这个问题,但不得不诺尔麦齐甚至有机会搞清楚这一点

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

如果作业related_group设置为0,则允许任何人查看它。如果作业related_group未设置为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

2 个答案:

答案 0 :(得分: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

您需要在上面的SQL

中添加用户ID

未登录

    SELECT *
      FROM jobs
     WHERE relevant_group = 0

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

答案 1 :(得分:0)

将来,尝试在您的问题中发布您自己尝试解决此类问题的尝试。它有助于我们更好地了解您的目标。除非你当然不确定从哪里开始,所以希望这会对你有帮助。

你的第一个“IF”非常简单:我有一个WHERE来检查related_group是否为零。您声明只有当related_group不为零时才想获取组信息,所以我认为LEFT连接更合适(假设“groups”表中没有行,group_number为零)。 / p>

你的第二个“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以及您所看到的结果编辑帖子。