Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка. 
:(
    Опции темы
Predator199
  Дата 11.2.2013, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 412
Регистрация: 1.2.2012

Репутация: -3
Всего: -4



Есть 20 гл категорий, знаю их id. 
Беру цикл, в цикле делаю обращение к рекурсии на выборку всех id(суб категорий).
В итоге у меня получается 600 категорий(id), после чего делаю выборку новостей из бд.
На все это уходит 07 сек.
Подскажите пжл, как сделать, чтоб быстрей. Минимум времени затрачивалось на весь сбор ид ит.. smile 
PM MAIL   Вверх
MoLeX
Дата 11.2.2013, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



ты код сначала покажи


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Aliance
Дата 11.2.2013, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Видимо ты делаешь запросы внутри рекурсивной функуции? Лучше собирать в массив найденные IDшники, а затем скопом в одном запросе выбрать where id in(?).
PM MAIL WWW ICQ Skype   Вверх
Predator199
  Дата 11.2.2013, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 412
Регистрация: 1.2.2012

Репутация: -3
Всего: -4



Сам я не понял как составить рекурсию на выборку всех id расположенных глубже. На примере сделал вот такую:
Код

    foreach ($cat_info as $key)    
        $sub_id[$key['id']] = $key['sub_id'];

    function get($sub, $return='') 
    {
       global  $sub_id;

        foreach(array_keys($sub_id, $sub) as $id) {
            $return .= $id.',';        
            $return = get($id,$return);
        }
        return $return;
    }



С начало  делаю запрос, ориентируюсь по alt имени категории.
Дальше через цикл, вытаскиваю id(к примеру вышло 10 гл категорий , знаю их ид). В этом же цикле делаю обращение к функции, вытаскиваю все ид расположенных категорий глубже.
После того как вытащил и сложил все ид, убрал запятую с последнего результат. Дальше еще один запрос но в запрос уже подставляю все собранные id. И получается вополнение скрипта 0.06-0.08 сек. 
Без всего этого сбора 0.004. Вот как можно было бы проще сделать весь процесс? Так чтоб уложиться в 0.01(мах)

Это сообщение отредактировал(а) Predator199 - 11.2.2013, 18:43
PM MAIL   Вверх
Aliance
Дата 11.2.2013, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Цитата(Predator199 @  11.2.2013,  19:42 Найти цитируемый пост)
После того как вытащил и сложил все ид, убрал запятую с последнего результат. 

Зачем? implode()
PM MAIL WWW ICQ Skype   Вверх
Predator199
  Дата 11.2.2013, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 412
Регистрация: 1.2.2012

Репутация: -3
Всего: -4



Не совсем понял. Я же не массив получаю от рекурсии,а сразу прибавляю и получаю к примеру: "234,234,2,". Через  rtrim, запятую убираю с конца.
Даже если убрать rtrim, разницы во времени не будит.
Может можно попроще рекурсию сделать, я вот думал да не понял.  Как забрать id, которые расположены глубже. Вот чтоб подняться и собрать-это можно. 

Кэшировать каждую страницу- не выход. 
Выход или другой способ есть, просто я его не знаю и написал как щас себе представляю. 

Это сообщение отредактировал(а) Predator199 - 11.2.2013, 19:11
PM MAIL   Вверх
Aliance
Дата 12.2.2013, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Любую рекурсию можно превратить в цикл. И тут даже не столько дело во времени, чем в эстетике. Конкатенировать, обрезать - это костыли, ну имхо. А push`ить массив, а потом его implode`ить - это адекватнее.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.