Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Добрый день, может кто помочь упорядочить стандартную древовидную структуру из Id+OwnerId ? Только есть одно "Но". В этой таблице есть ещё одно поле - OrderId, которое верно только в рамках одного узла. И выборка должна быть в соответствии с OrderId. Уже день маюсь над этим. Почти получилось, только когда CONVERT(VARCHAR(MAX),OrderId) = 100, то порядок идёт не правильный. Служба безопасности должна быть в самом конце. Caption PathРуководство1Служба безопасности100Отдел кадров2Управление бездельников3 Отдел лодырей3\1 Группа бородатых лодырей3\1\1 Отдел лентяев3\2 Группа бородатых тунеядцев3\2\1 Группа бородатых лентяев3\2\2 Пример SQL: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:02 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Соответсвенно, должно получится: Caption PathРуководство1Отдел кадров2Управление бездельников3  Отдел лодырей3\1    Группа бородатых лодырей3\1\1  Отдел лентяев3\2    Группа бородатых тунеядцев3\2\1    Группа бородатых лентяев3\2\2Служба безопасности100 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:07 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Valery_BСлужба безопасности должна быть в самом конце. Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:07 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Akina, И как это будет работать, когда добавят OrderID = 101 ? Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:13 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Valery_Bкак это будет работать, когда добавят OrderID = 101 ?Ну добавь да попробуй, чего спрашивать-то? тем более что у тебя и скрипты есть готовые, только ещё запись допиши... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:18 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Valery_B, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:25 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
AkinaValery_Bкак это будет работать, когда добавят OrderID = 101 ?Ну добавь да попробуй, чего спрашивать-то? тем более что у тебя и скрипты есть готовые, только ещё запись допиши... Странный ты. Зачем ты тогда отвечаешь, если не знаешь, что будет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:25 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
andy st, Спасибо! Вроде работает, хотя до конца не понял, как :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:31 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Valery_Bandy st, Спасибо! Вроде работает, хотя до конца не понял, как :)Это CTE - рекурсивное табличное выражение, используется для построения полного пути к элементу, в виде строки. И потом по пути делается сортировка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:36 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Да, я знаю про CTE, я его здесь и написал :) Обычно в Path стоит название, и ORDER BY идёт по названию. В данном случае, ORDER BY должен идти по OrderId(в рамках каждого узла), а не по алфавиту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:40 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Valery_BЗачем ты тогда отвечаешь, если не знаешь, что будет ?Я прекрасно знаю, что будет. Но я хочу, чтобы ты, начав получать ответы, не отключал напрочь думалку, а пытался понять, почему ответ - работает так, как ты хочешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 10:52 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Valery_Bandy st, Спасибо! Вроде работает, хотя до конца не понял, как :) Path слева заполняется нулями + OrderId, затем берётся 20 символов справа, поэтому 0000003 < 0000100 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 11:24 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
andy stValery_B, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Решение, конечно, правильное, но мне прям как то некомфортно становится, когда строковое представление чисел используют для задач сортировки... Хоть это и не слишком критично - мы даже не сохраняем результат, предлагаю поэкономить и конвертировать в varbinary: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 13:06 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Valery_BОбычно в Path стоит название, и ORDER BY идёт по названию. В данном случае, ORDER BY должен идти по OrderId(в рамках каждого узла), а не по алфавиту.в Path можно записать что угодно - то есть то, по чему нужно сортировать. Раз нужно по OrderId, значит, записать OrderId Конечно, дополнив OrderId ведущими нулями (или любым символом, который <= "0"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 13:12 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
MinamotoРешение, конечно, правильное, но мне прям как то некомфортно становится, когда строковое представление чисел используют для задач сортировки... Я конечно согласен, что ORDER BY <VARCHAR> не очень. Но в таком случае, можно вывести как понятную для человека строку Path. Пусть сервер хоть задымится, сортируя по этому полю(он делает это раза 2-3 в день на таблице в 1000 строк) Зато, не задымится мозг у другого разработчика, который в первый раз это увидит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 15:23 |
|
||
|
Как упорядочить дерево ? ORDER BY OrderID на рекурсивном запросе
|
|||
|---|---|---|---|
|
#18+
Valery_BMinamotoРешение, конечно, правильное, но мне прям как то некомфортно становится, когда строковое представление чисел используют для задач сортировки... Я конечно согласен, что ORDER BY <VARCHAR> не очень. Но в таком случае, можно вывести как понятную для человека строку Path. Пусть сервер хоть задымится, сортируя по этому полю(он делает это раза 2-3 в день на таблице в 1000 строк) Зато, не задымится мозг у другого разработчика, который в первый раз это увидит. Хм, а что непонятного в значении 0x000000030000000100000001 после значения 0x0000000300000001 ? ИМХО, даже незнакомый с логикой человек поймет смысл за довольно короткое время. Я тоже увидел этот прием первый раз здесь на форуме - запустил для проверки, конечно, но ничего страшного в нем не увидел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2019, 15:43 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39876445&tid=1687123]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 404ms |

| 0 / 0 |
