Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сокращение запросов в БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
LCarlo
Отправлено: 21 Марта, 2013 - 11:40:08
Post Id



Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Здравствуйте, товарищи ! Столкнулся с такой проблемой:
в бд есть таблица (1, 2), данные которой выводятся ч-з цикл:
PHP:
скопировать код в буфер обмена
  1. while ( $res = $query->($result) ) {
  2. $one[] = $res['1'];
  3. $two[] = $res['2'];
  4. //Еще один запрос
  5. $var = "SELECT * FROM `one` where one='".$one[]."' AND two = '".$two[]."' ";
  6. $tree[] = $query->($var);
  7. }

Так вот суть в том, что на основе $one[N] & $two[N] должен делатся запрос (причем не один,а кол-во раз выполн. запроса). Со стороны логики, если кол-во повторов 1-2, то это еще нормально, но если это кол-во > N*10, тогда и БД отправляется в "отпуск". К тому же, $one & $two являются динамическими (был вариант при добавлении в таблицу вставлять текущие данные $one & $two, но никак).
Возможно ли как-то реализовать по-другому, подскажите, пожалуйста ?
 
 Top
LIME
Отправлено: 21 Марта, 2013 - 12:15:43
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




PHP:
скопировать код в буфер обмена
  1. $var[]= "(one='".$one[]."' AND two = '".$two[]."')";
  2. }
  3. $var="SELECT * FROM `one` where ".implode(' OR ',$var);
  4. $tree[] = $query->($var);
  5.  
 
 Top
LCarlo
Отправлено: 21 Марта, 2013 - 12:19:29
Post Id



Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




LIME пишет:
$var[]= "(one='".$one[]."' AND two = '".$two[]."')";
}
$var="SELECT * FROM `one` where ".implode(' OR ',$var);
$tree[] = $query->($var);

Если бы Улыбка , задача как-то сократить запросы, если это конечно реально при такой задаче.
 
 Top
LIME
Отправлено: 21 Марта, 2013 - 12:24:30
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




LCarlo пишет:
Если бы
а что не сокращает?
нормально опиши задачу
вероятнее всего у тебя архитектура хромая
 
 Top
LCarlo
Отправлено: 21 Марта, 2013 - 12:33:44
Post Id



Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




LIME пишет:
а что не сокращает?
нормально опиши задачу
вероятнее всего у тебя архитектура хромая

Не спорю - хромая Улыбка , вкратце:
PHP:
скопировать код в буфер обмена
  1. $sql = "SELECT * FROM `one` where one='".$var1."' ";
  2.                
  3. $result = $query->($sql);
  4.  
  5. while ( $row = $res->($result) ) {
  6. $one[] = $row['one'];
  7. $two[] = $query->(SELECT * FROM `two` where one='".$one[]."' ");
  8.                         }

Задача состоит в том, чтобы эффективно реализовать вывод $two, с минимумом запросов. Просто если данных в таблице будет over100, то и запросов будет столько же, а это уже провал.

(Отредактировано автором: 21 Марта, 2013 - 12:35:20)

 
 Top
LIME
Отправлено: 21 Марта, 2013 - 12:35:59
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




LCarlo пишет:
Просто если данных в таблице будет over100, то и запросов будет столько же
а теперь внимательнее смотри мой код
он выводит запрос из цикла
запрос будет длинный но 1
это значительно снизит нагрузку
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB