Mysql 在合并结果中分组前的顺序

Mysql 在合并结果中分组前的顺序,mysql,sql,Mysql,Sql,我有两张桌子: 用户表 “体验”表,其中包含当前用户就读的学校的相关信息。此表可以包含多个学校(即以前的学校历史,甚至工作) 我希望获取users表,然后还获取当前学校(通过订购:exp\u date) 查询如下所示: SELECT u.user_id, u.firstname, pn.programme_name, e.exp_start, en.firstname AS name FROM edu_users u LEFT JOIN edu_experi

我有两张桌子:

  • 用户表
  • “体验”表,其中包含当前用户就读的学校的相关信息。此表可以包含多个学校(即以前的学校历史,甚至工作)
我希望获取users表,然后还获取当前学校(通过订购:exp\u 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)是我需要的结果-不应获取下面与用户id 1关联的两个结果

我如何实现这个目标?我尝试过使用
groupbyuser\u id
,但是数据在排序之前是分组的,因此结果如下所示:

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


有什么想法吗?我已经尝试过这个问题中描述的min(),但它不起作用。

在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

根据子选择加入以获取每个用户的最新体验,然后根据体验(及以后)加入该子选择以获取其他详细信息

像这样的

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

请参阅上面链接的相关问题。我想你应该使用MAX(exp_start)而不是MIN。谢谢-我已经尝试了MAX和MIN相同的结果。你好-问题是上面的查询只能获取1个结果。