|
|
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Привет всем! Столкнулся с такой проблемой: необходимо выполнить определенное число SQL-запросов в цикле. Посоветуйте как правильно сделать. Вот урезанный код программы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 20:35 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Переписал код таким образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Посоветуйте как теперь правильно закрывать объекты. Нужно ли в цикле while закрывать объект Connection ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 23:56 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
На мой взгляд в цикле закрывать объект Connection не просто нет необходимости, но и неправильно, также нет необходимости каждый раз закрывать объекты resultset2, и ps! Я думаю это должно происходить примерно так: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 07:12 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Хорошим тоном считается указание имен серверов и версии сипользуемых компонент. У тебя крупная ошибка если ты использует autocommit mode=true тот тогда та можеш иметь по спецификации только один открытый resultset. Некоторые севрера вообще могутиметь только один открытый resultset в одном connection. Далее надо оборачивать в try{} finally использование объектов. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 10:55 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
если не секрет, где написано о том что при autocommit = true можно иметь только один открытый ResultSet? ps. try ... finally конечно же надо использовать, но в таких количествах... по моему нецелесообразно, да и код становится неудобочитаемым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 11:02 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Timmесли не секрет, где написано о том что при autocommit = true можно иметь только один открытый ResultSet? А прямо в документации на setAutoCommit. The commit occurs when the statement completes or the next execute occurs Т.е. когда у тебя идет excute в любом Statement вызывается commit, что равно закрытию всех ResultSet. Timm ps. try ... finally конечно же надо использовать, но в таких количествах... по моему нецелесообразно, да и код становится неудобочитаемым. Хм. а имет утечку всех ресурсов лучше? Хотя если закрывается statement то RS должен закрытся автоматически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 13:17 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Евгений Путилин Timmесли не секрет, где написано о том что при autocommit = true можно иметь только один открытый ResultSet? А прямо в документации на setAutoCommit. The commit occurs when the statement completes or the next execute occurs Т.е. когда у тебя идет excute в любом Statement вызывается commit, что равно закрытию всех ResultSet. Timm ps. try ... finally конечно же надо использовать, но в таких количествах... по моему нецелесообразно, да и код становится неудобочитаемым. Хм. а имет утечку всех ресурсов лучше? Хотя если закрывается statement то RS должен закрытся автоматически. 1) понял. из одного statement'a одновременно получить 2 result set'a - нельзя в случае autocommit = true. просто так никогда не писал :) если надо работать с несколькими result set'ами одновременно, всегда создавал соответствующее количество statement'ов. 2) а что утечка то? одного finally вполне достаточно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 13:47 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Timmиз одного statement'a одновременно получить 2 result set'a - нельзя в случае autocommit = true можно. только что проверил. ms sql 2000, jsqlconnect. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 13:49 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Timm 1) понял. из одного statement'a одновременно получить 2 result set'a - нельзя в случае autocommit = true. просто так никогда не писал :) если надо работать с несколькими result set'ами одновременно, всегда создавал соответствующее количество statement'ов. Не уверен что правильно понял. Смысл в том что ты при выполнении любого statement'а, получиш commit для Connection. Со всеми вытекающими последтвиями. Timm2) а что утечка то? одного finally вполне достаточно... Хм. а что будет с Connection если у тебя в ps.close() вылетит exception? Лично ловился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 13:51 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Евгений Путилин Timm 1) понял. из одного statement'a одновременно получить 2 result set'a - нельзя в случае autocommit = true. просто так никогда не писал :) если надо работать с несколькими result set'ами одновременно, всегда создавал соответствующее количество statement'ов. Не уверен что правильно понял. Смысл в том что ты при выполнении любого statement'а, получиш commit для Connection. Со всеми вытекающими последтвиями. Timm2) а что утечка то? одного finally вполне достаточно... Хм. а что будет с Connection если у тебя в ps.close() вылетит exception? Лично ловился дык пофиг на коммит. вопрос, насколько я понял, в другом. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. finally - один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 13:58 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Hi Timm дык пофиг на коммит. вопрос, насколько я понял, в другом. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. finally - один. О ужас =8-0 Ты не то считаеш, во первых у тебя 4 try проив 3-х моих. Во вторых у тебя на каждый ресурс по 4 дополнительных операции -- при объявлении Код: plaintext Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext Еще ты теряеш исключения коотрые происходят в close(). Т.е. ты написал почти то что и я, только обвешал многими дополнительными рющечками которые нафиг не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 14:50 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Я конечно не знаю постановку задачи, но нельзя ли использовать вместо: Код: plaintext вот это: Код: plaintext ? То есть nodes будет генериться в цикле, а потом ВНЕ цикла будет выполняться запрос... -- nexus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 15:02 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Евгений ПутилинHi Timm дык пофиг на коммит. вопрос, насколько я понял, в другом. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. finally - один. О ужас =8-0 Ты не то считаеш, во первых у тебя 4 try проив 3-х моих. Во вторых у тебя на каждый ресурс по 4 дополнительных операции -- при объявлении Код: plaintext Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext Еще ты теряеш исключения коотрые происходят в close(). Т.е. ты написал почти то что и я, только обвешал многими дополнительными рющечками которые нафиг не нужны. 1) я плохо считаю? у тебя 6 try'ев. у меня - один основной. Try которые в finally - только для проформы. 2) Throwable на то и написано, что пойух, че там происходит. главное - обnull'ить по поводу рюшечек - не знаю что ты там имеешь ввиду... но твой код читать гораздо неудобней - каждй чих для чего то ловится, но сути не меняет. чтоб уж было понятно, вот 2 куска кода. твой Код: plaintext 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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 15:23 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Timm согласен с оратором. ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 15:25 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Timm 1) я плохо считаю? у тебя 6 try'ев. у меня - один основной. Try которые в finally - только для проформы . Ясь ?, что не знаю применение этого слова к програмированию. Timm 2) Throwable на то и написано, что пойух, че там происходит. главное - обnull'ить. обнулять нафиг не Обнулять не надо вообще. Timmпо поводу рюшечек - не знаю что ты там имеешь ввиду... но твой код читать гораздо неудобней - каждй чих для чего то ловится, но сути не меняет. чтоб уж было понятно, вот 2 куска кода. твой Вот здесь ты приврал. Код: plaintext 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. 41. 42. Код: plaintext 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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. Количество try 6 штук. Timmчто лучше читается - по моему ясно. ну да, согласен только передергивать не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 16:21 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
А зачем столько try-catch чуть ли не для каждой операции, обнуллять объекты а след строчкой им же новые значения присваивать??? так вот напрмер нельзя? Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 08:14 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
SherstПривет всем! Столкнулся с такой проблемой: необходимо выполнить определенное число SQL-запросов в цикле. Посоветуйте как правильно сделать. Вот урезанный код программы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Заранее спасибо. А что, параметризованные запросы уже под запретом?! По-моему, просто пишешь запрос с параметром и в цикле этот параметр меняешь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 08:51 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
LinerА зачем столько try-catch чуть ли не для каждой операции, обнуллять объекты а след строчкой им же новые значения присваивать??? так вот напрмер нельзя? делать commit в блоке finally - не самая хорошая идея. хотя все зависит от задачи. в общем случае - это неправильно. к тому же в соотв. блоке catch лучше делать явный rollback. А.Грасоff™ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 08:53 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
LinerА зачем столько try-catch чуть ли не для каждой операции, обнуллять объекты а след строчкой им же новые значения присваивать??? так вот напрмер нельзя? Код: plaintext 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. Что у тебя будет с connect.close(); если в connect.commit(); вылетит исключение например по deadlock ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 11:13 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
А.Грасоff™ делать commit в блоке finally - не самая хорошая идея. хотя все зависит от задачи. в общем случае - это неправильно. к тому же в соотв. блоке catch лучше делать явный rollback. А зачем делать явный rollback если для используемого подключения выставлено setAutoCommit(false)? Это тоже самое что делать commit если выставлено setAutoCommit(true). Евгений ПутилинЧто у тебя будет с connect.close(); если в connect.commit(); вылетит исключение например по deadlock ? Согласен, поторопился, нужно переместить commit выше в конец блока try и все, хотя если например нужно чтобы в базу пошли те запросы которые корректные и отработали до вылета, тогда commit нужно обернуть в еще try-catch Вопрос не о том хотел задать, вопрос зачем писать по 5 try-catch? Чтобы в правильном порядке закрыть resultset и statement? Но они и сами прекрасно закроются когда в текущем блоке кода больше не останется на них ссылок или когда закроется подключение. Зачем в них null записывать и городить для этого Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 11:29 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Liner А.Грасоff™ делать commit в блоке finally - не самая хорошая идея. хотя все зависит от задачи. в общем случае - это неправильно. к тому же в соотв. блоке catch лучше делать явный rollback. А зачем делать явный rollback если для используемого подключения выставлено setAutoCommit(false)? Это тоже самое что делать commit если выставлено setAutoCommit(true). Евгений ПутилинЧто у тебя будет с connect.close(); если в connect.commit(); вылетит исключение например по deadlock ? Согласен, поторопился, нужно переместить commit выше в конец блока try и все, хотя если например нужно чтобы в базу пошли те запросы которые корректные и отработали до вылета, тогда commit нужно обернуть в еще try-catch Вопрос не о том хотел задать, вопрос зачем писать по 5 try-catch? Чтобы в правильном порядке закрыть resultset и statement? Но они и сами прекрасно закроются когда в текущем блоке кода больше не останется на них ссылок или когда закроется подключение. Зачем в них null записывать и городить для этого Код: plaintext 1. 2. 3. 4. 5. 6. 7. следи за темой :) последнее - это мое. явное об'nullение - для случая когда на close() вылетит exeption. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 11:38 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Timmследи за темой :) последнее - это мое. явное об'nullение - для случая когда на close() вылетит exeption. Слежу, это тоже твое Timm ResultSet resultset = null; ... resultset = null; resultset = statement.executeQuery("SELECT * FROM T2 WHERE ParentID=0"); А зачем нужно явное об'nullение всех объектов? Все ResultSet, Statement можно описать в блоке try - блок закрылся, все объекты ушли. Тем более пишут Евгений Путилина имет утечку всех ресурсов лучше? Хотя если закрывается statement то RS должен закрытся автоматически а потом все равно их закрывают, на всякий случай наверное :-) И вот так должно нормально работать Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 12:03 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Liner Тем более пишут Евгений Путилина имет утечку всех ресурсов лучше? Хотя если закрывается statement то RS должен закрытся автоматически а потом все равно их закрывают, на всякий случай наверное :-) Не на всякий случай а т.к. так принято. В освобождении ресурсов. Liner И вот так должно нормально работать Код: plaintext 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. Оно работать наверное будет. Можно вообще так написать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 17:06 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
LinerА зачем делать явный rollback если для используемого подключения выставлено setAutoCommit(false)? Это тоже самое что делать commit если выставлено setAutoCommit(true).а где про это сказано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 17:22 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Я так понимаю вопрос стоит в выборке древовидных структур из БД. Если да то ваш вариант подходит плохо только потому что уровень вложености ограничен тут нужны рекурсивные алгоритмы. Вообщем хотелось бы знать зачем такая структура нужна. Да кстати если в качестве сервера БД используется Oracle или скажем PostgreSQL то может подумать над использованием запроса Connect by prior? Он вам всю структуру за один запрос нарисует. Если де нет то может попробовать другую структуру БД когда у листьев только указатель на корневую ноду и поле LEVEL которое показывает глубину вложенности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 11:39 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
такие задачи решаються на уровне sql или strored procedures ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 14:54 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
manschтакие задачи решаються на уровне sql или strored procedures Именно это я и хотел сказать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 16:53 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Евгений ПутилинВ случае если тебе нужно будет 10^6 раз выполнить запроc и ты каждый раз будеш препарировать заново то получиш утечку памяти и на клиенте и на сервере. Код: plaintext 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. 10^6 раз может выполнится только ResultSet resultset2 = st.executeQuery(""); в цикле. Ну и что что препарить буду, это один и тот же statement, никаких утечек на серваке не будет. На клиенте - ссылок на resultset2 не остается - garbage collector без проблем сам разберется. Если я не догоняю чего-то напишите где будут утечки. Я почему спросил про try-catch, суть не то что ресурсы освобождать не надо, ИМХО заворачивать каждый объект в try-finally не стоит, не такие уж тут гигантские растраты. Это ладно тут всего 2 стейтмента, а если их штук 5-7 будет, причем большинство вы только 1 раз откроете? На что ваш код похож будет??? Тут у Timm вроде бы универсальное решение (у него тоже кстати внутри цикла resultset2 не закрывается, так что из вашей логики 10^6 запросов в его коде сожрут столько же памяти) :-) все объекты который он использует в блоке try он объявляет выше а в finally просто контроль всех этих объектов чтоб закрыты были, это удобно, везде одинаково и не нужно думать закроется ли все или нет - 100% закроется. Но вопрос а нужно ли это вообще делать если следующей командой подключение закрываете???? а connection.close() - автоматом закрывает все объекты связанные с ним? авторpublic void close() throws SQLException Releases this Connection object's database and JDBC resources immediately instead of waiting for them to be automatically released Хотя может быть (точно не знаю, мож кто-нить просветит) так тщательно нужно закрывать объекты если, например, используется пул соединений, но тут я так понял мы говорим об обычном подключении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 18:39 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
А.Грасоff™ LinerА зачем делать явный rollback если для используемого подключения выставлено setAutoCommit(false)? Это тоже самое что делать commit если выставлено setAutoCommit(true).а где про это сказано? Хотел написать, что если после ошибок, подключение закрываем - зачем делать rollback? Из javadoc насчет connection.close(): Releases this Connection object's database and JDBC resources immediately instead of waiting for them to be automatically releasedСессия закроется и изменения в базу не уйдут. Но решил еще почитать и наткнулся на вот эту статейку. Офигеть!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 19:11 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
to Sergey Karpenkov Да, вопрос стоит в выборе древовидных структур из БД.В качестве сервера исп. Interbase. Структура таблицы такая: [ИдентификаторУзла] [ИмяУзла] [УказательНаРодитель] Алгоритм построения написан выше (сначала пишу запрос на выбор узлов у которых нет родителя,затем в цикле для каждого такого узла выполняю запрос по поиску его детей,если дети существуют то к род. узлу добавляю фиктивный узел). mansch такие задачи решаються на уровне sql или strored procedures Т.е. писать хранимую процедуру с параметром - по которому выбираются родительские узлы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 20:00 |
|
||
|
SQL-запросы
|
|||
|---|---|---|---|
|
#18+
Sherstto Sergey Karpenkov Да, вопрос стоит в выборе древовидных структур из БД.В качестве сервера исп. Interbase. Структура таблицы такая: [ИдентификаторУзла] [ИмяУзла] [УказательНаРодитель] Алгоритм построения написан выше (сначала пишу запрос на выбор узлов у которых нет родителя,затем в цикле для каждого такого узла выполняю запрос по поиску его детей,если дети существуют то к род. узлу добавляю фиктивный узел). Дёргать базу из-за каждой ветки дерева идея очень плохая. Если конечно вложеность и количество узлов не оч большое то это прокатит, но при росте вложености и количества узлов абсолютно бесполезная трата ресурсов БД. В любом случае даже если следовать вашему алгоритму, то надо если есть такая возможность применять ленивую выборку. Если же надо всё дерево сразу, то я бы сильно подумал и всё таки попробовал изменить структуру так чтобы можно было сделать выборку за один приём, а потом уже рекурсивным алгоритмом разобрать полученый результ сет. Посмотрите вот сюда http://sdm.viptop.ru/articles/sqltrees.html может быть поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2005, 11:15 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2150664]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
144ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 405ms |

| 0 / 0 |
