MySQL查询未正确返回

时间:2017-04-20 06:09:25

标签: mysql sql

- 编辑

我仍然因某些原因没有得到它。我会详细介绍我的问题。

职位表

   id, title ... all details
    1, title1,...
    2, title2,...
    3, title3,...
    4, title4,...

job_user表

id,id_job,id_user
1,1,1
2,2,3
3,3,3
4,4,4

following_job表

id,id_job,id_user
1, 1, 3

所以基本上,用户3有2个作业(2,3),并且他跟随用户1的作业1.因此,如果我以用户3登录,我想获得用户<>的所有细节作业。 3(只是我需要做的要求)。 我会得到结果

id,id_job,id_user
    1,1,1 
    4,4,4

我的目标结果是:

id,title..., following_id
        1,title1,...,1
        4,title4,...,0

以上结果将添加following_id,因为用户3跟随id_job 1,因此其following_id = 1 else = 0.而id_job 1,4将与jobs表连接以获取有关它的详细信息:title ...

我正在执行关注/取消关注作业功能

全部谢谢

1 个答案:

答案 0 :(得分:3)

通常,您会有第二个表,其中包含您要搜索/匹配的has_jobs id_job | (other columns...) 2 3 值,如下所示:

has_jobs

然后,您可以将following_job加入SELECT t2.id t1.id_job, CASE WHEN t2.id_job IS NULL THEN 0 ELSE 1 END AS following_id FROM has_jobs t1 LEFT JOIN following_job t2 ON t1.id_job = t2.id_job 以获得所需的结果:

has_jobs

如果您没有实际的SELECT t2.id t1.id_job, CASE WHEN t2.id_job IS NULL THEN 0 ELSE 1 END AS following_id FROM ( SELECT 2 AS id_job UNION ALL SELECT 3 -- add more IDs here if wanted ) t1 LEFT JOIN following_job t2 ON t1.id_job = t2.id_job 表,那么您可以改为使用内联表:

long start = System.currentTimeMillis();
long end = System.currentTimeMillis();
long diff = end - start;
DateTime dt = new DateTime(diff);