Из-за меняющихся требований я пересмотрел интерфейс, который я создал пару месяцев назад. Дополнительные функции, больше данных. Я получил помощь в сложных требованиях к порядку данных over here. Но требования изменились или были более точными, расширены. Я уже несколько часов занимаюсь ремеслом и не добился успеха. Я надеюсь, что SO может помочь мне разблокировать меня еще раз.MySQL сложный вопрос ORDER BY
Вот несколько упрощенных данных образца, которые отображаются в базе данных, и как мне нужно заказать его.
**RAW** **DESIRED** ╔════╦════════╦═══════════╦═══════════╗ ╔════╦════════╦═══════════╦═══════════╗ ║ id ║ job_id ║ action_id ║ iteration ║ ║ id ║ job_id ║ action_id ║ iteration ║ ╠════╬════════╬═══════════╬═══════════╣ ╠════╬════════╬═══════════╬═══════════╣ ║ 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 ║ ╚════╩════════╩═══════════╩═══════════╝ ╚════╩════════╩═══════════╩═══════════╝
**EXPLAINED** ╔════╦════════╦═══════════╦═══════════╗ ║ id ║ job_id ║ action_id ║ iteration ║ ╠════╬════════╬═══════════╬═══════════╣ ORDERED BY: ║ 14 ║ 6 ║ 1 ║ 0 ║ ║ 16 ║ 6 ║ 2 ║ 0 ║ The largest id with action_id of 1 ╠════╬════════╬═══════════╬═══════════╣ followed by all of the rows with the ║ 12 ║ 1 ║ 1 ║ 1 ║ same job_id and iteration number as ║ 13 ║ 1 ║ 2 ║ 1 ║ the first, ordered by ascending ║ 15 ║ 1 ║ 3 ║ 1 ║ action_id. ╠════╬════════╬═══════════╬═══════════╣ ║ 8 ║ 5 ║ 1 ║ 0 ║ Then the next largest id with ║ 10 ║ 5 ║ 2 ║ 0 ║ action_id = 1, etc. ║ 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
Но doesen't учитывать итерацию. Я не вижу, где я могу вместить эту логику. Может ли кто-нибудь помочь?
Большое спасибо!