Я пытаюсь сортировать таблицу mysql несколькими столбцами. Вот таблица:Заказ MySql на основе нескольких столбцов
+------------+------------+------------+------------+
| id | parent_id | ordering | level |
+------------+------------+------------+------------+
| 1 | 0 | 0 | 0 |
+------------+------------+------------+------------+
| 2 | 0 | 2 | 0 |
+------------+------------+------------+------------+
| 3 | 0 | 3 | 0 |
+------------+------------+------------+------------+
| 4 | 0 | 4 | 0 |
+------------+------------+------------+------------+
| 5 | 2 | 0 | 1 |
+------------+------------+------------+------------+
| 6 | 0 | 1 | 0 |
+------------+------------+------------+------------+
И это результат я хотел бы достичь:
+------------+------------+------------+------------+
| id | parent_id | ordering | level |
+------------+------------+------------+------------+
| 1 | 0 | 0 | 0 |
+------------+------------+------------+------------+
| 6 | 0 | 1 | 0 |
+------------+------------+------------+------------+
| 2 | 0 | 2 | 0 |
+------------+------------+------------+------------+
| 5 | 2 | 0 | 1 |
+------------+------------+------------+------------+
| 3 | 0 | 3 | 0 |
+------------+------------+------------+------------+
| 4 | 0 | 4 | 0 |
+------------+------------+------------+------------+
Как вы можете (я надеюсь) увидеть, я хотел бы, чтобы отсортировать детали заказа и parent_id. Я бы предпочел, если возможно, использовать один запрос. Если это невозможно, я могу использовать цикл PHP в сочетании с запросом. Я хотел бы держаться подальше от нескольких запросов, если это вообще возможно.
Мне нужен способ сортировки так, чтобы строка с parent_id
, такая как строка с id=5
, находилась ниже ее «родительской строки» (строка с id=2
). «ordering» основан на «уровне».
Ближайший я пришел это сортировкой это с:
SELECT * FROM table ORDER BY ordering,id,parent_id
который возвращает:
+------------+------------+------------+------------+
| id | parent_id | ordering | level |
+------------+------------+------------+------------+
| 1 | 0 | 0 | 0 |
+------------+------------+------------+------------+
| 5 | 2 | 0 | 1 |
+------------+------------+------------+------------+
| 6 | 0 | 1 | 0 |
+------------+------------+------------+------------+
| 2 | 0 | 2 | 0 |
+------------+------------+------------+------------+
| 3 | 0 | 3 | 0 |
+------------+------------+------------+------------+
| 4 | 0 | 4 | 0 |
+------------+------------+------------+------------+
честно, я не понимаю, как вы считаете, результат отсортирован. Ни значения в 'ordering', ни' parent_id' не находятся в отсортированном порядке. – duskwuff
Можете ли вы уточнить - я не вижу, как упорядочиваются и parent_id сортируются вообще ... – sgeddes
Если строки были заказаны 1, 6, 2, 3, 4, 5, то я бы понял, что вы просите. –