MySQL-如何指示用户是否申请工作?

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)

我有一个数据库模式,如下图所示:

我想编写一个查询,选择所有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) 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。