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]   

> Описание: уменьшить запросы к БД
Viper
Отправлено: 09 Февраля, 2010 - 10:03:28
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




Задача такова.
Есть таблица статистики stats с полями gid, grole, gstats.
Есть вторая таблица personal с полями id, role, published
Есть кнопка "Публиковать/Снять с публикации".
Поле role содержит записи вида "старший манагер, дворник, собутыльник по совместительству"
И есть такой код

PHP:
скопировать код в буфер обмена
  1. if (!is_array( $cid ) || count( $cid ) < 1) {
  2.         $action = $publish ? 'archive' : 'unpublish';
  3.         echo "<script> alert('Выберите объект для $action'); window.history.go(-1);</script>\n";
  4.         exit;
  5. }
  6.  
  7. $cids = implode( ',', $cid );
  8. $database->setQuery( "UPDATE `#__personal` SET `published` = '$publish' WHERE id IN ($cids)" );
  9. if (!$database->query()) {
  10.         echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>\n";
  11.         exit();
  12. }
  13. $database->setQuery( "SELECT `role` FROM `#__personal` WHERE `id` IN ($cids)" );
  14. $rows = $database->loadObjectList();
  15. foreach ($rows as $row) {
  16.         $g = explode(', ', $row->role);
  17.         foreach ($g as $gen) {
  18.                 $database->setQuery("SELECT `gid` FROM `#__stats` WHERE `grole` LIKE '%$gen%'");
  19.                 $id = $database->loadResult();
  20.                 if ($publish == 1) {
  21.                         $database->setQuery("UPDATE `#__stats` SET `g_stats` = `g_stats`+1 WHERE `g_id` = '".(int)$id."'");
  22.                         $database->query();
  23.                 } else {
  24.                         $database->setQuery("UPDATE `#__stats` SET `g_stats` = `g_stats`-1 WHERE `g_id` = '".(int)$id."'");
  25.                         $database->query();
  26.                 }
  27.         }
  28. }


можно ли как-то упростить не переделывая структуру БД данный код. Учитывая что записей отмеченных к публикации или снятию может быть до 50 штук(т.е. пир таком виде как сейчас это примеро 50*3 запросов к бд).

(Отредактировано автором: 09 Февраля, 2010 - 10:04:04)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB