Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление из базы N записей одним запросом, Борьба с назрузкой на сервер БД 
V
    Опции темы
supercelt
Дата 16.9.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



На сайте есть чекбоксы, их отмечают, напротив фирмы, которую хотят удалить из базы
Код

while($data=mysql_fetch_array($w))
  {
  echo '<tr>
           <td><input type="checkbox" name="del['.$data['id_firm'].']" /></td>
        </tr>';
  }


В обработчике:

Код

if(isset($_POST['del']))//Есть ли отмеченные галки - Удалить
  {
    $tmp_del=array_keys($_POST['del']);
    $z=array();
    foreach($tmp_del as $tmpd)
           { 
    $z[]='`id_firm`="'.$tmpd.'"';
           }
    $result=join(' AND ', $z);
    $delete='DELETE FROM `'.MPREFIX.'bs_firms` WHERE '.$result;
      if(mysql_query($delete))
      {
      echo 'Заявки успешно удалены<br />';
      }
      else
      {
      echo 'Ошибка! Не удалось удалить заявки<br />';
      }
  }


Вопрос: Почему нельзя удалить таким способом?. Получается один запрос что бы удалить все отмеченные.  А так придётся каждый раз в цикле DELETE... писать. А если записей в базе 1000000, на БД нагрузка пойдёт и хостер прикроет сайт. Может есть способ ещё какой?
PM   Вверх
whyte
Дата 16.9.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 6.6.2008

Репутация: нет
Всего: нет



попробуй сделать не AND id_firm`="'.$tmpd.'"

а использовать IN, например, 
Код

DELETE FROM bs_firms where id_firm IN (123,345,678);


Как сформировать строку в скобках должен сам справиться.

PM MAIL   Вверх
supercelt
Дата 16.9.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



О, whyte, спасибо, сработало. Теперь буду знать))
PM   Вверх
Kudzu
Дата 16.9.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Magnificus Picus
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 30.4.2008
Где: KLD

Репутация: нет
Всего: 1



Грубер "Понимание SQL" вам в помосч.
PM MAIL WWW ICQ Skype Jabber   Вверх
Glip
Дата 4.10.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 1
Всего: 18



Цитата(supercelt @  16.9.2008,  14:50 Найти цитируемый пост)
Вопрос: Почему нельзя удалить таким способом?

потому что в таком случае вы пытаетесь удалить записи в которых id_firm равняется _всем_ перечисленным значениям. можно удалять и так как вы пытались, но вместо AND использовать OR, что в итоге логично переходит в IN(), как написано выше


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0406 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.