этот код тестируется на mysql db.
если у вас есть ТОЛЬКО_FULL_GROUP_BY, вы должны отключить его ...
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))
затем создайте сохраненную процедуру, чтобы сделать нужный вам заказ:
CREATE PROCEDURE custom_order()
BEGIN
SET @restCount := 1;
CREATE TEMPORARY TABLE IF NOT EXISTS my_result_table
SELECT * FROM goods group by parent_link order by parent_link;
CREATE TEMPORARY TABLE IF NOT EXISTS my_temp_table
SELECT * FROM goods;
WHILE @restCount >0 DO
DELETE FROM my_temp_table where (name in (SELECT name FROM my_result_table));
INSERT into my_result_table(good_link,parent_link,name) select good_link,parent_link,name FROM my_temp_table group by parent_link order by parent_link;
set @restCount=(SELECT COUNT(*) FROM my_temp_table);
END WHILE;
SELECT * FROM my_result_table;
END
Тогда ты можешь называть это как хочешь...
Основная идея состоит в том, чтобы сделать две временные таблицы, одна будет держать результат, а другая удалить перемещенные отсортированные строки,
каждое время петля... отдельные упорядоченные строки будут перемещаться из временной таблицы в таблицу результатов.
Обратите внимание, что в графе "имя" в качестве уникального первичного ключа вы можете поменять его на подходящий.
Вы также можете передать хранимой процедуре имя таблицы и название столбца, по которому хотите произвести сортировку, в качестве параметров ...
Я составил таблицу в своем дб, назвал ее "товаром" и вставил точные данные, которые вы предоставили.
Пожалуйста, дайте мне знать, если это поможет