如何从3个表中获取?

时间:2017-11-25 08:59:12

标签: php mysql

我正在建立一个求职网站,我有3张桌子。

1: jobs_table iduser_idjob_titlelocationjob_description,{{ 1}},currencysalarysalary_typeemployment_typepost_time

2: visiblity applications_tableidcreator_idapplicant_idjob_id

3: status user_tableidprofile_picturefirst_namelast_name,{{ 1}},phone_numberemail_addresspassworddata

目前,我根据用户输入(下面的PHP代码)从verification_key中进行选择,但是,我还试图向用户显示他们已经申请的工作和要做到这一点,我需要从modify_date中选择(获取我已经在做的工作数据),还要从jobs_table中选择当前用户ID来检查是否存在Jobs_tableapplications_table的行如果此行存在,则用户已经申请了该位置。

非常感谢任何帮助。

PHP

applicant_id

更新:

我现在已将SELECT查询修改为以下内容:

job_id

但是,我在结果中获得了重复项,申请工作的每个用户都会在结果中复制该作业。

1 个答案:

答案 0 :(得分:1)

如何使用LEFT JOIN

  

LEFT JOIN关键字返回左表中的所有记录   (table1),以及右表(table2)中匹配的记录。

SELECT *, id AS jt_id FROM jobs_table jt
LEFT JOIN applications_table at ON jt.jt_id = at.job_id AND jt.user_id = at.applicant_id 
WHERE jt.visibility = 2 AND (jt.job_title LIKE :job_title) AND (jt.location = :location) AND (jt.salary >= :salary);

这应返回jobs_table中与搜索条件匹配的所有行,如果用户已从jobs_table应用于该特定作业(行),则其中一些行可以从applications_table中获得额外数据。

类似的东西:

jt_id  user_id  job_title  location  ... id  applicant_id  job_id
=================================================================
1      15       php dev    london
2      23       java dev   liverpool
3      44       haskell    manchester
4      52       front end  bristol       7   52            4
5      66       golang     leeds

jt_id = 4的行有一些额外的值,这意味着用户已经应用于该作业。 这应该给你一些指示,但不幸的是,我没有时间来测试这个查询。

修改

我犯了一个错误。 LEFT JOIN应该在WHERE条款之前...愚蠢的我。再次检查查询,它已更新。 或 try it online