关于连接和限制的复杂SQL查询

mTu*_*ran 5 mysql sql

SELECT DISTINCT users.id as expert_id, users.firstname, users.lastname
    , projects.id as project_id, projects.project_title
    , projects.project_budget, projects.created as project_created
FROM USERS
RIGHT JOIN expert_skills ON expert_skills.expert_id = users.id
JOIN project_skills ON project_skills.skill_id = expert_skills.skill_id
JOIN projects ON projects.id = project_skills.project_id
WHERE projects.status = 1
Run Code Online (Sandbox Code Playgroud)

此查询为我提供了与用户相关的不同项目,但我想限制每位专家的项目数.例如,我想要与专家相关的项目,但项目数量最多可达10个.我的查询需要一个限制工具.我怎么能这样做?谢谢

Con*_*rix 0

如果 MySQL 有 row_number,这确实很容易,但事实并非如此。

因此,您需要修改安多马尔对类似问题的回答。

 set @num := 0, @projectid:= -1;


 SELECT DISTINCT users.id as expert_id, users.firstname, users.lastname, projects.id as                project_id, projects.project_title, projects.project_budget, projects.created as project_created
 FROM 
     USERS
        RIGHT JOIN expert_skills ON expert_skills.expert_id = users.id
        JOIN project_skills ON project_skills.skill_id = expert_skills.skill_id
        JOIN projects ON projects.id = project_skills.project_id
    JOIN
    (select  
            users.id uid,
           project.id pid,
           @num := if(@projectid= projects.id, @num + 1, 1) 
                as row_number,
            @projectid:= project.id
    from    USERS
        RIGHT JOIN expert_skills ON expert_skills.expert_id = users.id
        JOIN project_skills ON project_skills.skill_id = expert_skills.skill_id
        JOIN projects ON projects.id = project_skills.project_id
    WHERE projects.status = 1
    order by 
            users.id, project.id desc
    ) as projectNum 
    on users.id = pid
    and projects.id = pid
   where   projectNum.row_number <= 10
Run Code Online (Sandbox Code Playgroud)

请参阅data.stackoverflow.com中的此查询, 了解如何在支持窗口的数据库中执行此操作