gpt4 book ai didi

mysql - 在 SQL 中从多对多关系创建队列

转载 作者:行者123 更新时间:2023-11-29 09:28:57 25 4
gpt4 key购买 nike

我的关系在 ActiveRecord 中是这样定义的

class Developer < ApplicationRecord
has_many :developers_code_reviews
has_many :code_reviews, through: :developers_code_reviews
end

class DevelopersCodeReview < ApplicationRecord
belongs_to :code_review
belongs_to :developer
end

class CodeReview < ApplicationRecord
has_many :developers_code_reviews
has_many :developers, through: :developers_code_reviews
end

因此,一个开发人员有很多代码审查,而一个代码审查又有很多开发人员。这通过developers_code_reviews 表进行。

我想要的是查询 MySQL 以获得代码审查的开发人员队列。例如,如果尚未创建代码审查,并且我们有 dev1、dev2、dev3。如果 dev1 获得代码审查,那么 dev2 或 dev3 应该接受下一次审查。如果下一次代码审查是给 dev2 和 dev3,那么下一次代码审查应该给 dev1。

我找到了一个很好的 StackOverflow 答案,它把我带到了这里:

SELECT developer_id
FROM developers_code_reviews
GROUP BY developer_id
ORDER BY max(updated_at) ASC

问题是我只有 developers_code_reviews 表中的开发者 ID,并且我需要 developers,而不是 developers_code_reviews

所以我找到了一些关于子查询的文档,并发现这个查询运行:

SELECT *
FROM developers
WHERE id IN (
SELECT developer_id
FROM developers_code_reviews
GROUP BY developer_id
ORDER BY max(updated_at) ASC
)

但它不会保留 IN 查询的顺序。有人知道怎么做吗?

最佳答案

您是否尝试使用内部联接而不是 in 子句

喜欢

SELECT *
FROM developers d inner Join ( SELECT developer_id,max(updated_at) maxupdt
FROM developers_code_reviews
GROUP BY developer_id) dcr ON d.id=dcr.developer_id
ORDER BY maxupdt

对子查询进行排序仅需要与 LIMIT 结合使用

关于mysql - 在 SQL 中从多对多关系创建队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com