我正在建立一个求职网站,我有3张桌子。
1: jobs_table
: id
,user_id
,job_title
,location
,job_description
,{{ 1}},currency
,salary
,salary_type
,employment_type
,post_time
2: visiblity
: applications_table
,id
,creator_id
,applicant_id
,job_id
3: status
: user_table
,id
,profile_picture
,first_name
,last_name
,{{ 1}},phone_number
,email_address
,password
,data
目前,我根据用户输入(下面的PHP代码)从verification_key
中进行选择,但是,我还试图向用户显示他们已经申请的工作和要做到这一点,我需要从modify_date
中选择(获取我已经在做的工作数据),还要从jobs_table
中选择当前用户ID来检查是否存在Jobs_table
和applications_table
的行如果此行存在,则用户已经申请了该位置。
非常感谢任何帮助。
PHP
applicant_id
更新:
我现在已将SELECT查询修改为以下内容:
job_id
但是,我在结果中获得了重复项,申请工作的每个用户都会在结果中复制该作业。
答案 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