2013-10-03 154 views
0

我有两个表:顺序加入结果

  • 用户表
  • “体验”表包含有关哪些学校当前用户进入。此表可以包含多重学校(即以前的办学历史,甚至作业)

我想获取用户表,然后又取了现在的学校(由订购:EXP_DATE)

查询看起来是这样的:

SELECT 
u.user_id, 
    u.firstname, 
    pn.programme_name, 
    e.exp_start, 
    en.firstname AS name 
FROM 
    edu_users u 
    LEFT JOIN edu_experience e ON e.exp_user = u.user_id 
    LEFT JOIN edu_users en ON en.user_id = e.exp 
    LEFT JOIN edu_programmes pn ON pn.programme_id = e.exp_position 
ORDER BY 
    exp_start DESC 

,并返回这个结果:

第一个结果(从用户ID 1)是一个我所需要的 - 下面两个不应该获取与user_id 1关联的关联。

我该如何完成我的这个目标?我曾尝试与group by user_id但随后将数据分组有序之前的,所以结果看起来是这样的:

任何想法?我用min()尝试了这个问题:ORDER BY date and time BEFORE GROUP BY name in mysql,但它不起作用。

+0

见上面链接的相关问题。你会想要使用MAX(exp_start)而不是MIN,我想。 –

+0

谢谢 - 我已经尝试过与MAX相同的结果。 – FooBar

回答

1

加入针对子查询以获得每个用户最新的体验,然后再加入该背靠经验(及以后),以获得其他细节

像这样的事情

SELECT 
u.user_id, 
    u.firstname, 
    pn.programme_name, 
    e.exp_start, 
    en.firstname AS name 
FROM 
    edu_users u 
    LEFT JOIN (SELECT exp_user, MAX(exp_start) AS MaxExpStart FROM edu_experience GROUP BY exp_user) e1 ON e1.exp_user = u.user_id 
    LEFT JOIN edu_experience e ON e.exp_user = u.user_id AND e.exp_start = e1.MaxExpStart 
    LEFT JOIN edu_users en ON en.user_id = e.exp 
    LEFT JOIN edu_programmes pn ON pn.programme_id = e.exp_position 
ORDER BY 
    exp_start DESC 
0

在MySQL中,你需要使用一个相关子查询,只得到每个用户的“最新”记载:

SELECT 
    u.user_id, 
    u.firstname, 
    pn.programme_name, 
    e.exp_start, 
    en.firstname AS name 
FROM 
    edu_users u 
LEFT JOIN edu_experience e ON e.exp_user = u.user_id 
LEFT JOIN edu_users en ON en.user_id = e.exp 
LEFT JOIN edu_programmes pn ON pn.programme_id = e.exp_position 
WHERE e.exp_start = (
    SELECT MAX(exp_start) FROM edu_experience z 
    WHERE z.exp_user = e.exp_user) 
ORDER BY 
    exp_start DESC 
+0

嗨那里 - 问题是它只获取1结果与上述查询。 – FooBar