Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
9 / 9 / 4
Регистрация: 04.08.2013
Сообщений: 157
1

Быстрый поиск в БД

03.11.2015, 16:59. Показов 649. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Столкнулся с проблемой поиска в таблице с большим кол-вом записей.
Дело в том, то у меня есть парсер который я написал на PHP который парсит данные из XML файла, а потом обновляет данные в БД. На данный момент уже набралось около 57тыс. записей в таблице. И вот я начинаю парсить из XML и там тоже около 50тыс., т.е я беру прохожусь построчно :

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
         $reader = new XMLReader();
         $reader->open('update_xml/SiteData2.xml');
 
         while ($reader->read()) {
             if ($reader->name == "Apartment") {
               //  echo '<p>'.$reader->getAttribute("kvnumber").'</p>';
 
 
                  $building_id = (int)$reader->getAttribute("buildingid");
                  $apartment_id = (int)$reader->getAttribute("id");
              
 
                   $rooms = $reader->getAttribute("rooms");
                   $flatfloor = $reader->getAttribute("flatfloor");
                   $facing = $reader->getAttribute("decoration");

Но при проходе по строке в XML файле мне нужно обратится в БД и посмотреть, если такой записи нет тогда вставить новую, если есть то обновить в ней данные.
Я в цикл который выше добавил сначала
PHP
1
2
3
4
              $sql3 = "SELECT sub_object_id FROM `#__sub_objects` 
                       WHERE `apartment_id` = '$apartment_id'";
              $db->setQuery($sql3);
              $sub_object_id = $db->loadResult();

Раньше когда записей было не много, то это срабатывало, а сейчас нет. скрипт просто подвисает.
Я решил искать не в БД а в массиве, я обращаюсь только один раз и получаю все данные и пишу их в глобальную переменную до цикла который выше:


PHP
1
2
3
              $sql3 = "SELECT sub_object_id,apartment_id FROM `#__sub_objects`";
              $db->setQuery($sql3);
              $this->sub_objects = $db->loadAssocList();
а потом уже с помощью функции в цикле который выше ищу:

PHP
1
$sub_object_id = $this->search_sub_object_id($apartment_id);

это сама функция поиска в многомерном массиве

PHP
1
2
3
4
5
6
7
8
9
10
function search_sub_object_id($val){
      
               foreach ($this->sub_objects as $key => $value)
                   {
                   if (array_search ($val, $value))
                        {
                        return ($value['sub_object_id']);
                        }   
                   }
}

но оно все равно подвисает, да и память грузит нехило. Посоветуйте что нибудь. Скорее всего нужно оптимизировать как нибудь БД.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2015, 16:59
Ответы с готовыми решениями:

Быстрый поиск
есть такой код &lt;html&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot;&gt; &lt;title&gt;Сообщение&lt;/title&gt; &lt;/head&gt; ...

Быстрый поиск
function fast(&amp;$mass, $dotC = 1) { $lmass = ; $rmass = ; for($i = 0; $i &lt;...

Быстрый поиск
Может подскажите еще по одному вопросу. Хочу реализовать поиск по первым введенным буквам фамилии....

Быстрый поиск
Доброго суток дня! Собрал быстрый поиск, но почему то выдает ошибку ...

0
03.11.2015, 16:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2015, 16:59
Помогаю со студенческими работами здесь

Быстрый поиск
Добрый день! Прошу Вас помочь хотя бы подсказкой в решении данной задачи. Для первых двух типов...

Быстрый поиск
Здравствуйте. Нужно выполнить поиск i-го вхождения заданного элемента в исходном наборе чисел....

Быстрый поиск объекта
Приветствую всех, мне нужно часто искать объект на сцене, но поиск же делаеться по всех объектах, а...

Быстрый поиск элемента
Добрый день всем! Такой вопрос - есть у меня строка из 64-х чаров. Мне приходит новый чар и нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru