2013-10-03 105 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