Задача с использованием MySQL
Иванов Иван

Добрый день! Подтолкните пожалуйста на решение, я застопорился!
Мне необходимо решить задачку с использованием MySQL. Суть:
Имеется таблица input, в которой есть набор чисел. Необходимо отсортировать с чередованием максимального и минимального значения (например, при наборе чисел 7, 3, 2, 6, 1, 9, 4 должна получится следующая последовательность - 9, 1, 7, 2, 6, 3, 4). Всё это нужно выгрузить в таблицу output.
Пользоваться библиотеками для сортировки или использовать сортировку на стороне сервера НЕЛЬЗЯ.

Дамп пустой базы данных:

CREATE TABLE IF NOT EXISTS `Input` (
`id` int NOT NULL AUTO_INCREMENT,
`val` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `Output` (
`id` int NOT NULL AUTO_INCREMENT,
`val` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `input` (`id`, `val`) VALUES
(1, 5),
(2, 2),
(3, 13),
(4, 25),
(5, 1),
(6, 4),
(7, 8);

А вот, что я смог наковырять сам в phpMyAdmin:

SET
@row_number = 0,
@max_id = 0,
@min_id = 0;
SELECT
@max_id:=(@row_number:=@row_number + 1) AS max_id,
val,
@min_id:=((SELECT COUNT(*) FROM `input`) - @row_number + 1) AS min_id,
ABS(@max_id - @min_id) AS cur_id
FROM
input ORDER BY val desc

Логика такая: сортируем записи по убыванию, каждой записи присваиваем значение max_id по порядку (первая запись получит 1, вторая 2 и тд), значение min_id в обратном порядке (начиная с последнего числа, которое равно кол-ву строк в input), вычитаем из max_id - min_id по модулю и получаем cur_id, по которому мы и определяем порядок для вывода.

На выходе из этого скрипта я получаю столбик cur_id, в котором и есть правильная последовательность (повторные значения необходимо отсортировать по убыванию столбца val), но не могу никак вывести это в таблицу output! Помогите с выводом пожалуйста!

Иванов Иван 8 месяцев назадСпасибо 0
1 чел.