dieser Code wird auf mysql db getestet.
wenn Sie ONLY_FULL_GROUP_BY haben, müssen Sie es deaktivieren ...
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))
dann erzeugen Sie eine Stored Procedure, um die gewünschte Reihenfolge herzustellen:
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
dann können Sie es nennen, wie Sie wollen ...
die Grundidee ist, zwei temporäre Tabellen zu erstellen, eine wird das Ergebnis enthalten und eine andere, um verschobene sortierte Zeilen zu entfernen,
in jeder while-Schleife ... werden die unterschiedlich geordneten Zeilen aus der temporalen in die Ergebnistabelle verschoben.
beachten Sie bitte, dass Sie die Spalte 'name' als eindeutigen Prim?rschl?ssel betrachten und sie in einen passenden ?ndern k?nnen.
sie k?nnen auch den Tabellennamen und den Spaltennamen, nach dem Sie sortieren m?chten, als Parameter an die Stored Procedure ?bergeben ...
ich habe eine Tabelle in meiner db erstellt, sie als "Waren" bezeichnet und die genauen Daten eingefügt, die Sie angegeben haben.
bitte lassen Sie es mich wissen, wenn es hilft