Удаление повторяющихся записей из таблицы Mysql в Laravel7 - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть одно имя таблицы temp

id,brand,message,created_atupdated_at

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

Я написал нижеприведенное утверждение, которое работает с небольшим количеством записей, но для огромных записей, оно застревает.

  $sql="
  delete
  from temp using temp,
  temp e1
  where temp.id > e1.id
  and temp.brand = e1.brand
  and temp.message IS NULL 
  ";
  DB::unprepared($sql);

что я хочу сделать, это 1. удалить дублирующиеся строки с тем же названием бренда, но только если сообщение является нулевым.

1 Ответ

0 голосов
/ 21 апреля 2020

Я сделал это wahy и его быстро и нормально работает

$result = DB::table('temp')
      ->select('id','brand')
      ->where('message', NULL)
      ->get();

$ids=array();
        foreach($result->unique('brand') as $brand){
          $ids[]=$brand->id;
        }


if(count($ids)>0){
          foreach(array_chunk($ids, 500) as $chunk) {
            $sql="
            delete
            from temp where id NOT IN ('".implode("','",$chunk)."')";
            DB::unprepared($sql);
          }
        }
...