由于不断变化的需求,我重新审视了几个月前创建的界面。更多功能,更多数据。我在这里收到了有关数据的棘手排序要求的帮助。但是需求已经改变,或者更准确地说,是扩展了。我已经修补了几个小时,但没有成功。我希望SO能够再次帮助我摆脱困境。
这是一些出现在数据库中的简化示例数据,以及我需要如何订购它。
**原始** **想要的** ╔════╦════════╦═══════════╦═══════════╗╔════╦═════ ═══╦═══════════╦═══════════╗ ║ id ║ job_id ║ action_id ║ 迭代 ║ ║ id ║ job_id ║ action_id ║ 迭代 ║ ╠════╬════════╬═══════════╬═══════════╣╠════╬═════ ═══╬═══════════╬═══════════╣ ║ 1 ║ 1 ║ 1 ║ 0 ║ ║ 14 ║ 6 ║ 1 ║ 0 ║ ║ 2 ║ 1 ║ 2 ║ 0 ║ ║ 16 ║ 6 ║ 2 ║ 0 ║ ║ 3 ║ 2 ║ 1 ║ 0 ║ ║ 12 ║ 1 ║ 1 ║ 1 ║ ║ 4 ║ 3 ║ 1 ║ 0 ║ ║ 13 ║ 1 ║ 2 ║ 1 ║ ║ 5 ║ 4 ║ 1 ║ 0 ║ ║ 15 ║ 1 ║ 3 ║ 1 ║ ║ 6 ║ 3 ║ 2 ║ 0 ║ ║ 8 ║ 5 ║ 1 ║ 0 ║ ║ 7 ║ 3 ║ 3 ║ 0 ║ ║ 10 ║ 5 ║ 2 ║ 0 ║ ║ 8 ║ 5 ║ 1 ║ 0 ║ ║ 11 ║ 5 ║ 3 ║ 0 ║ ║ 9 ║ 4 ║ 2 ║ 0 ║ ║ 5 ║ 4 ║ 1 ║ 0 ║ ║ 10 ║ 5 ║ 2 ║ 0 ║ ║ 9 ║ 4 ║ 2 ║ 0 ║ ║ 11 ║ 5 ║ 3 ║ 0 ║ ║ 4 ║ 3 ║ 1 ║ 0 ║ ║ 12 ║ 1 ║ 1 ║ 1 ║ ║ 6 ║ 3 ║ 2 ║ 0 ║ ║ 13 ║ 1 ║ 2 ║ 1 ║ ║ 7 ║ 3 ║ 3 ║ 0 ║ ║ 14 ║ 6 ║ 1 ║ 0 ║ ║ 3 ║ 2 ║ 1 ║ 0 ║ ║ 15 ║ 1 ║ 3 ║ 1 ║ ║ 1 ║ 1 ║ 1 ║ 0 ║ ║ 16 ║ 6 ║ 2 ║ 0 ║ ║ 2 ║ 1 ║ 2 ║ 0 ║ ╚════╩════════╩═══════════╩═══════════╝╚════╩═════ ═══╩═══════════╩═══════════╝
**解释** ╔════╦════════╦═══════════╦═══════════╗ ║ id ║ job_id ║ action_id ║ 迭代 ║ ╠════╬════════╬═══════════╬═══════════╣订购: ║ 14 ║ 6 ║ 1 ║ 0 ║ ║ 16 ║ 6 ║ 2 ║ 0 ║ action_id 为 1 的最大 id ╠════╬════════╬═══════════╬═══════════╣后面是所有的行 ║ 12 ║ 1 ║ 1 ║ 1 ║ 相同的 job_id 和迭代次数 ║ 13 ║ 1 ║ 2 ║ 1 ║ 第一个,按升序排列 ║ 15 ║ 1 ║ 3 ║ 1 ║ action_id。 ╠════╬════════╬═══════════╬═══════════╣ ║ 8 ║ 5 ║ 1 ║ 0 ║ 然后是下一个最大的id ║ 10 ║ 5 ║ 2 ║ 0 ║ action_id = 1 等。 ║ 11 ║ 5 ║ 3 ║ 0 ║ ╠════╬════════╬═══════════╬═══════════╣ ║ 5 ║ 4 ║ 1 ║ 0 ║ ║ 9 ║ 4 ║ 2 ║ 0 ║ ╠════╬════════╬═══════════╬═══════════╣ ║ 4 ║ 3 ║ 1 ║ 0 ║ ║ 6 ║ 3 ║ 2 ║ 0 ║ ║ 7 ║ 3 ║ 3 ║ 0 ║ ╠════╬════════╬═══════════╬═══════════╣ ║ 3 ║ 2 ║ 1 ║ 0 ║ ╠════╬════════╬═══════════╬═══════════╣ ║ 1 ║ 1 ║ 1 ║ 0 ║ ║ 2 ║ 1 ║ 2 ║ 0 ║ ╚════╩════════╩═══════════╩═══════════╝
我目前正在使用ORDER BY
这样的:
SELECT *
FROM reports as r
ORDER BY
FIND_IN_SET(r.job_id, ( SELECT GROUP_CONCAT(job_id ORDER BY id DESC)
FROM reports
WHERE action_id = 1)),
r.action_id
但它没有考虑迭代。我看不出我可以把那一点逻辑放在哪里。有人可以提供任何帮助吗?
非常感谢!