Задача такова.
Есть таблица статистики stats с полями gid, grole, gstats.
Есть вторая таблица personal с полями id, role, published
Есть кнопка "Публиковать/Снять с публикации".
Поле role содержит записи вида "старший манагер, дворник, собутыльник по совместительству"
И есть такой код
PHP:
скопировать код в буфер обмена
$action = $publish ? 'archive' : 'unpublish'; echo "<script> alert('Выберите объект для $action'); window.history.go(-1);</script>\n"; } $database->setQuery( "UPDATE `#__personal` SET `published` = '$publish' WHERE id IN ($cids)" ); if (!$database->query()) { echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>\n"; } $database->setQuery( "SELECT `role` FROM `#__personal` WHERE `id` IN ($cids)" ); $rows = $database->loadObjectList(); foreach ($rows as $row) { foreach ($g as $gen) { $database->setQuery("SELECT `gid` FROM `#__stats` WHERE `grole` LIKE '%$gen%'"); $id = $database->loadResult(); if ($publish == 1) { $database->setQuery("UPDATE `#__stats` SET `g_stats` = `g_stats`+1 WHERE `g_id` = '".(int)$id."'"); $database->query(); } else { $database->setQuery("UPDATE `#__stats` SET `g_stats` = `g_stats`-1 WHERE `g_id` = '".(int)$id."'"); $database->query(); } } }
можно ли как-то упростить не переделывая структуру БД данный код. Учитывая что записей отмеченных к публикации или снятию может быть до 50 штук(т.е. пир таком виде как сейчас это примеро 50*3 запросов к бд).(Отредактировано автором: 09 Февраля, 2010 - 10:04:04)
|