| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Выборка. |
| Автор: Predator199 11.2.2013, 13:18 |
| Есть 20 гл категорий, знаю их id. Беру цикл, в цикле делаю обращение к рекурсии на выборку всех id(суб категорий). В итоге у меня получается 600 категорий(id), после чего делаю выборку новостей из бд. На все это уходит 07 сек. Подскажите пжл, как сделать, чтоб быстрей. Минимум времени затрачивалось на весь сбор ид ит.. |
| Автор: MoLeX 11.2.2013, 14:45 |
| ты код сначала покажи |
| Автор: Aliance 11.2.2013, 15:39 |
| Видимо ты делаешь запросы внутри рекурсивной функуции? Лучше собирать в массив найденные IDшники, а затем скопом в одном запросе выбрать where id in(?). |
| Автор: Predator199 11.2.2013, 18:42 | ||
Сам я не понял как составить рекурсию на выборку всех id расположенных глубже. На примере сделал вот такую:
С начало делаю запрос, ориентируюсь по alt имени категории. Дальше через цикл, вытаскиваю id(к примеру вышло 10 гл категорий , знаю их ид). В этом же цикле делаю обращение к функции, вытаскиваю все ид расположенных категорий глубже. После того как вытащил и сложил все ид, убрал запятую с последнего результат. Дальше еще один запрос но в запрос уже подставляю все собранные id. И получается вополнение скрипта 0.06-0.08 сек. Без всего этого сбора 0.004. Вот как можно было бы проще сделать весь процесс? Так чтоб уложиться в 0.01(мах) |
| Автор: Aliance 11.2.2013, 18:58 | ||
Зачем? http://php.net/implode |
| Автор: Predator199 11.2.2013, 19:08 |
| Не совсем понял. Я же не массив получаю от рекурсии,а сразу прибавляю и получаю к примеру: "234,234,2,". Через rtrim, запятую убираю с конца. Даже если убрать rtrim, разницы во времени не будит. Может можно попроще рекурсию сделать, я вот думал да не понял. Как забрать id, которые расположены глубже. Вот чтоб подняться и собрать-это можно. Кэшировать каждую страницу- не выход. Выход или другой способ есть, просто я его не знаю и написал как щас себе представляю. |
| Автор: Aliance 12.2.2013, 10:19 |
| Любую рекурсию можно превратить в цикл. И тут даже не столько дело во времени, чем в эстетике. Конкатенировать, обрезать - это костыли, ну имхо. А push`ить массив, а потом его implode`ить - это адекватнее. |