MySQL-如何指示用户是否申请工作?
我有一个数据库模式,如下图所示: 我想编写一个查询,选择所有6个表的数据和一个字段,该字段指示特定用户是否申请了某项工作 我试过:MySQL-如何指示用户是否申请工作?,mysql,sql,Mysql,Sql,我有一个数据库模式,如下图所示: 我想编写一个查询,选择所有6个表的数据和一个字段,该字段指示特定用户是否申请了某项工作 我试过: SELECT j.id, j.expired_date, j.title, j.views, j.status , j.unread, j.applicants, j.location, j.created_date , j.contract_type, c.country , group_concat(DISTINCT jp.page_name)
SELECT j.id, j.expired_date, j.title, j.views, j.status
, j.unread, j.applicants, j.location, j.created_date
, j.contract_type, c.country
, group_concat(DISTINCT jp.page_name) AS fan_pages
, group_concat(DISTINCT jp.id_page) AS id_pages
, app.id AS applied
FROM jobs AS j
INNER JOIN country AS c ON c.id = j.country
LEFT JOIN job_pages AS jp ON jp.id_job = j.id
LEFT JOIN applications AS app ON app.id_job = j.id
LEFT JOIN resumes AS res ON res.id = app.id_resume
LEFT JOIN applicants AS alc ON alc.id = res.id_applicant
AND alc.id_user = 15
WHERE ( j.status = 0 )
AND ( j.expired_date = 0
OR j.expired_date > 1323228856 )
GROUP BY `j`.`id`
ORDER BY `j`.`id` desc
LIMIT 5 OFFSET 5
但它返回一个结果,表明任何用户都应用了作业。如何重写此查询?试试看
SELECT j.id_user as creator, alc.id_user as applier, j.id , j.expired_date, j.title, j.views, j.status
, j.unread, j.applicants, j.location, j.created_date
, j.contract_type, c.country
, group_concat(DISTINCT jp.page_name) AS fan_pages
, group_concat(DISTINCT jp.id_page) AS id_pages
, MAX(app.id) AS applied
FROM jobs AS j
INNER JOIN country AS c ON c.id = j.country
LEFT JOIN job_pages AS jp ON jp.id_job = j.id
LEFT JOIN applications AS app ON app.id_job = j.id
LEFT JOIN resumes AS res ON res.id = app.id_resume
LEFT JOIN applicants AS alc ON alc.id = res.id_applicant
WHERE
( alc.id_user = 15 or alc.id_user IS NULL) AND
( j.status = 0 )
AND ( j.expired_date = 0
OR j.expired_date > 1323228856 )
GROUP BY `j`.`id`
ORDER BY `j`.`id` desc
使现代化
我相信,现在的问题更好了:
SELECT
j.id, j.expired_date, j.title, j.views, j.status
, j.unread, j.applicants, j.location, j.created_date
, j.contract_type, c.country
, group_concat(DISTINCT jp.page_name) AS fan_pages
, group_concat(DISTINCT jp.id_page) AS id_pages
, max(app.id) AS applied
FROM users AS u
LEFT JOIN jobs AS j ON 1
INNER JOIN country AS c ON c.id = j.country
LEFT JOIN job_pages AS jp ON jp.id_job = j.id
LEFT JOIN applicants AS alc ON alc.id_user = u.id
LEFT JOIN resumes AS res ON res.id_applicant = alc.id
LEFT JOIN applications AS app ON app.id_resume = res.id AND app.id_job = j.id
WHERE u.id = 16 AND
( j.status = 0 )
AND ( j.expired_date = 0 OR j.expired_date > 1323228856 )
GROUP BY j.id
ORDER BY j.id
最新更新:
如果要获取app.id,请使用MAX函数,因为当您对一行或多行进行分组时,MAX函数将正确返回所需的id,否则仅返回第一行,并且可能错误为NULL
连接表用户和作业
和加入申请应与id_简历和id_工作
试试看
SELECT j.id_user as creator, alc.id_user as applier, j.id , j.expired_date, j.title, j.views, j.status
, j.unread, j.applicants, j.location, j.created_date
, j.contract_type, c.country
, group_concat(DISTINCT jp.page_name) AS fan_pages
, group_concat(DISTINCT jp.id_page) AS id_pages
, MAX(app.id) AS applied
FROM jobs AS j
INNER JOIN country AS c ON c.id = j.country
LEFT JOIN job_pages AS jp ON jp.id_job = j.id
LEFT JOIN applications AS app ON app.id_job = j.id
LEFT JOIN resumes AS res ON res.id = app.id_resume
LEFT JOIN applicants AS alc ON alc.id = res.id_applicant
WHERE
( alc.id_user = 15 or alc.id_user IS NULL) AND
( j.status = 0 )
AND ( j.expired_date = 0
OR j.expired_date > 1323228856 )
GROUP BY `j`.`id`
ORDER BY `j`.`id` desc
使现代化
我相信,现在的问题更好了:
SELECT
j.id, j.expired_date, j.title, j.views, j.status
, j.unread, j.applicants, j.location, j.created_date
, j.contract_type, c.country
, group_concat(DISTINCT jp.page_name) AS fan_pages
, group_concat(DISTINCT jp.id_page) AS id_pages
, max(app.id) AS applied
FROM users AS u
LEFT JOIN jobs AS j ON 1
INNER JOIN country AS c ON c.id = j.country
LEFT JOIN job_pages AS jp ON jp.id_job = j.id
LEFT JOIN applicants AS alc ON alc.id_user = u.id
LEFT JOIN resumes AS res ON res.id_applicant = alc.id
LEFT JOIN applications AS app ON app.id_resume = res.id AND app.id_job = j.id
WHERE u.id = 16 AND
( j.status = 0 )
AND ( j.expired_date = 0 OR j.expired_date > 1323228856 )
GROUP BY j.id
ORDER BY j.id
最新更新:
如果要获取app.id,请使用MAX函数,因为当您对一行或多行进行分组时,MAX函数将正确返回所需的id,否则仅返回第一行,并且可能错误为NULL
连接表用户和作业
和加入申请应与id_简历和id_工作
-编辑-
下面是一个基本的ERD,说明如何更容易地跟踪已申请工作的用户。我将用户和简历之间的关系设为1:M,以防您想要跟踪简历版本。如果不是,则应为1:1关系
因此,给定ERD,您可以让用户使用简历申请一份工作。如果您想使简历成为可选的,那么可以从M:M with Job中删除简历表,并直接链接到用户
只是一些想法
-原创的-
只是一些建议
在我看来,您可能需要重新访问模式设计。看起来申请者表应该是用户表和作业表之间的数据透视表。用户和作业表具有M:M关系,因为许多用户可以应用于许多作业,许多作业可以由许多用户应用。当用户申请工作时,申请者表应充当事务表
另外,简历表不应该直接链接到用户表吗?申请者如何拥有简历
用户拥有一份简历
用户通过简历申请人申请工作。-Edit-
下面是一个基本的ERD,说明如何更容易地跟踪已申请工作的用户。我将用户和简历之间的关系设为1:M,以防您想要跟踪简历版本。如果不是,则应为1:1关系
因此,给定ERD,您可以让用户使用简历申请一份工作。如果您想使简历成为可选的,那么可以从M:M with Job中删除简历表,并直接链接到用户
只是一些想法
-原创的-
只是一些建议
在我看来,您可能需要重新访问模式设计。看起来申请者表应该是用户表和作业表之间的数据透视表。用户和作业表具有M:M关系,因为许多用户可以应用于许多作业,许多作业可以由许多用户应用。当用户申请工作时,申请者表应充当事务表
另外,简历表不应该直接链接到用户表吗?申请者如何拥有简历
用户拥有一份简历
用户向简历申请人申请工作。如果您只想选择某个特定用户,您可以将该条款包括在简历中。老实说,我很难理解您的意思question@jreal因为我想显示所有作业的列表,以及特定用户应用于哪个作业,所以它有一根棍子。您可以看到:在alc.id=res.id\u申请者和alc.id\u用户=15上以alc的形式加入申请者,您已经完成了这些操作,您仍然面临什么问题?介意删除限制和偏移量吗?@ajreal我面临的问题是,对任何用户应用的所有作业都显示stick,而不是当前作业。如果您只想选择特定用户,您可以将该子句包括在WHERE中。老实说,我很难理解您的question@jreal因为我想显示所有作业的列表,在某个特定用户应用的作业中,它有一根棍子。您可以看到:在alc.id=res.id\u申请者和alc.id\u用户=15上以alc的形式加入申请者,您已经完成了这些操作,您仍然面临什么问题?介意取消限制和补偿吗?@ajreal我面临的问题是,任何用户申请的所有作业都会显示stick,而不是当前的作业。你能向我解释更多细节吗?@Vietan:当然,我今天晚些时候工作不忙时会抛出ERD。你能向我解释更多细节吗?@Vietan:当然,今天晚些时候工作不那么忙的时候,我会吐一个ERD。