|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Есть таблица в которой хранятся древовидные списки : id(key)CaptionParent1ToyotaNULL2NissanNULL3FordNULL4Ractis15Yaris16Versa17Almera2 8Tiana29Focus310Kuga311Wagon312Disel1113Benz1114Gaz11 В дереве имеет вид : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Мне нужно зная ID любого элемента получить список его и его родителей (ветку) Например ID=12 доложен вернуть результат IDCaption12Dizel11Wagon3Ford А ID=8 должен вернуть результат : IDCaption8Tiana2Nissan Табличка с машинами взята для примера :) вообще делаю систему прав доступа ... На текущий момент есть скрипт на PHP который справляется с данной задачей, но он генерирует огромное количество запросов, и при частом вызове просто делает лишние телодвижения :( хотелось бы знать вообще можно реализовать такое запросом ? мои познания в SQL весьма средние... ума не приложу с чего начать Заранее благодарен ... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2014, 10:15 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Fastereusс чего начатьНапример, с изменения структуры хранения данных. Можно перейти на nested set. А можно просто добавить поле, где хранить материализованный путь. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2014, 15:28 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2014, 15:36 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Нашел лишь такой ответ на хабре авторВынужден огорчить пользователей mySQL – в этой СУБД придется рекурсию организовывать внешними по отношению к СУБД средствами, например на php (код приводить не буду, его публиковали не раз, например здесь, достаточно поискать по запросу “mySQL tree” и т.п.). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2014, 02:37 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Akina, Менять не чего нельзя ... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2014, 02:39 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
FastereusНашел лишь такой ответ на хабре авторВынужден огорчить пользователей mySQL – в этой СУБД придется рекурсию организовывать внешними по отношению к СУБД средствами, например на php (код приводить не буду, его публиковали не раз, например здесь, достаточно поискать по запросу “mySQL tree” и т.п.). Не читайте перед обедом советских газетхабра. Хотя рекурсивных запросов и в самом деле нет, вполне можно обойтись "внутренними" средствами - хранимыми процедурами. А если у вас не планируется перенос веток, то материализованный путь имхо будет лучшим решением. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2014, 06:35 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
FastereusМенять не чего нельзянельзя менять структуру или вообще ничего нельзя? т.е. даже хранимку свою добавить тоже нельзя? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2014, 06:36 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Сервак чуджой, доступ к процедурам не проверил .. но в принципе я не бумаю что юзание процедур сократит количество запросов, а получется тот же гемор что я на PHP нарисовал только в SQL... так что наверно вопрос снят, я просто не знал что нет рекурсии в муське, очень жаль ... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2014, 16:51 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Fastereusа получется тот же гемор что я на PHP нарисовал только в SQLТолько в варианте с ХП это будет один запрос, который можно использовать везде а в пхп-варианте это будет N запросов в цикле, которые каждый раз придётся копипастить. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2014, 05:22 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Следующее было накидано налету, протестировано, провда не оптимизировано но на мой взгляд все весьма локонично вышло : Код: php 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. 36. 37. 38. 39. 40.
В PHP нет проблем с рекурсией, ну и есть такая же работающая в обратном направлении принцип тот же ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2014, 14:30 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
tanglirFastereusНашел лишь такой ответ на хабре пропущено... Не читайте перед обедом советских газетхабра. Хотя рекурсивных запросов и в самом деле нет, вполне можно обойтись "внутренними" средствами - хранимыми процедурами. А если у вас не планируется перенос веток, то материализованный путь имхо будет лучшим решением. хотел этоже написать. :) пхп сообщетво делиться на две части, как и везде 80 20. 80 незнают даже склтольком, не говоря уже о определённой субд. вот и советуют что попало. другое дело, если ТС будет организовывать обход дерева, тут бы сразу задуматься о памяти. обход надо организовывать обходя в глубь а не по горизонтали. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2014, 15:15 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Считаю что не важно как лиж бы работало, в моем случае сначало нужно написать около 25 классов а потом уже их оптимизировать, тем более чтопоследнее делается практически до бесконечности, про СУБД я и в правду не ГУРУ, но как видно это мой первый вопрос был и увы ответа на него нет ... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 03:26 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
FastereusВ PHP нет проблем с рекурсиейа в мускле есть? Fastereusэто мой первый вопрос был и увы ответа на него нет"нет"? простите, а что вы подразумеваете под "ответом"? неужели готовое решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 05:07 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
FastereusСчитаю что не важно как лиж бы работало, в моем случае сначало нужно написать около 25 классов а потом уже их оптимизировать, тем более чтопоследнее делается практически до бесконечности, про СУБД я и в правду не ГУРУ, но как видно это мой первый вопрос был и увы ответа на него нет ... тебе же написали - NS tree способ хранения дерева, оптимимальный при редких изменениях и частых выборках по типу - получить всех детей, получить всех родителей, получить всех братьев...итд ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 12:36 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
NS tree = SAXX (если кто знает что называли так....) tanglirFastereusВ PHP нет проблем с рекурсиейа в мускле есть? Fastereusэто мой первый вопрос был и увы ответа на него нет"нет"? простите, а что вы подразумеваете под "ответом"? неужели готовое решение? Думаю нет ... FastereusНашел лишь такой ответ на хабре авторВынужден огорчить пользователей mySQL – в этой СУБД придется рекурсию организовывать внешними по отношению к СУБД средствами, например на php (код приводить не буду, его публиковали не раз, например здесь, достаточно поискать по запросу “mySQL tree” и т.п.). И да я бы хотел готовый ответ, ибо я например если отвечаю даю готовые ответы ... простите если не оправдал надежд ... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2014, 11:58 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Fastereus, mysql Recursive limit 255 (as set by the max_sp_recursion_depth variable) was exceeded for Там, правда, от родителей к потомкам, но если вы не сумеете развернуть в обратную сторону, то какой смысл вообще что-то советовать? Кстати, если дерево не очень глубокое, то и вариант ТСа(явно рекурсивный) вполне работоспособен. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2014, 12:11 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
при условии что у детки только один парент Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2014, 11:59 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
bochkovпри условии что у детки только один парент Код: sql 1. 2.
маленько поправлю Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2014, 12:44 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
bochkovbochkovпри условии что у детки только один парент Код: sql 1. 2.
маленько поправлю Код: sql 1. 2.
Нет деток во первых много во вторых, вложенность хаотична по веткам , в одних 1 или две в других 8 или девять итераций ... Ваш метод не прокатит, собственно я пришел к мнению что пока оставлю на ПХП функцию ... тем более что у меня система это делает один раз при входе пользователя и лишняя секунда не важна ... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2014, 18:36 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Fastereus, в этом запросе нет ограничений на вложенность, хоть бы попробовал ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2014, 23:47 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Я конечно попробую ... но только когда приеду с всеросийской стройки счас на Космодроме восточный, тут дела немного другие ... Я не понял запроса увидел некторые не знакомые конструкции, попробую обязательно а еще до этого прочитаю как этодолжно работать , яж сказал что не БАЗИСТ йа ... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2014, 15:58 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Fastereusдеток во первых многоbochkov писал о родителе, а не о детях а запрос - неочевидный, да из серии "обводим мускль вокруг пальца" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2014, 06:27 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
tanglirFastereusдеток во первых многоbochkov писал о родителе, а не о детях а запрос - неочевидный, да из серии "обводим мускль вокруг пальца" :) Еще раз уточну что базы данных не когда небыли моим коньком , вот страшные скалярные строкина CGI не вопрос а СУБД всегда мло сталкивались со мной, я приеду через 2 недели попробую сначала понять потом сделать ... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2014, 07:36 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
Почитайте MySQL. Иерархические запросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2014, 23:21 |
|
Прошу помощи в составлении хитрого запроса
|
|||
---|---|---|---|
#18+
bochkov, приветствую , хоть и куча лет прошла но тема опять всплыла в новь ... попробовал и вот результат : child_id;parent_id;493;492;492;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL; Как видишь не работает :) А вот так работает : SET @child_id = '869'; SELECT @child_id AS `ID` , @child_id := (SELECT Owner FROM test_th_nodes WHERE `ID` = @child_id LIMIT 1) AS `Owner` FROM test_th_nodes WHERE @child_id IS NOT NULL; ID;Owner;869;867;867;NULL; ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 06:47 |
|
|
start [/forum/topic.php?fid=47&msg=38740122&tid=1828760]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
84ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 316ms |
total: | 498ms |
0 / 0 |