Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Удаление из базы N записей одним запросом


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

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, на БД нагрузка пойдёт и хостер прикроет сайт. Может есть способ ещё какой?

Автор: whyte 16.9.2008, 14:54
попробуй сделать не AND id_firm`="'.$tmpd.'"

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

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


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

Автор: supercelt 16.9.2008, 15:11
О, whyte, спасибо, сработало. Теперь буду знать))

Автор: Kudzu 16.9.2008, 17:21
Грубер "Понимание SQL" вам в помосч.

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)