[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как избавиться от запросов к БД в цикле?
ivanrsn
Поставлена задача сделать управление зданиями (удаление там / создание / редактирование ), а в зданиях присутствуют площадки (залы) для проведения конференций. У площадок могут быть наборы фотографий, которые хранятся в виде файлов на винчестере.

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

В классе зданий есть метод для удаления здания по его id, вот такой


// удаление здания по id
public function deleteBuildingById($intId){
$objDB = Service_Database::instance();

//удаление площадок из здания
$arrAreaIds = $objDB->selectSimpleArray('SELECT `id_area` FROM `area` WHERE `id_building` ='.$intId);
if (!empty($arrAreaIds))
{
$objArea = new Area();
// наверняка можно придумать способ удаления без цикла
foreach ($arrAreaIds as $intAreaId)
{
$objArea->deleteAreaById($intAreaId);
};
};

$objDB->query('DELETE FROM building WHERE building.`id_building`='.$intId);

}


И чувствую своим програмерским сердцем, запускать запросы к БД в цикле - последнее дело. Но фишка в том, что у площадок есть фотографии.. Которые как раз и подчищает deleteAreaById($intAreaId); А за одно и из MySQL запись удаляет. Вот и приходится для каждой площадки так напрягаться.

Может существует способ делать это иначе, без запросов к базе в цикле?
johniek_comp
id удаляемых записуешь в массив, и идешь читать про ф-ю IN() в mysql,

_____________
user posted image
bestxp
а что тебе мешает сделать несколько запросов выборок
всех зон, потом всех фото зон
потом удалить WHERE id in (1,2,2,,3) сначало зоны, потом пройдясь циклом по фото удалить из ФС, потом кучей из бд, ну там разбавив проверками. и никаких тебе запросов в цикле не нужно
ivanrsn
Благодарен. Предложенные варианты будут рассмотрены и опробованы.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.