Переходить с одного стола на другой - PullRequest
0 голосов
/ 20 июля 2011

Мне нужно переместить некоторые данные из таблицы в архивную таблицу.

Теперь я делаю это так:

$sql = 'INSERT INTO history_products 
         SELECT * FROM products WHERE category_id='.$id;

И затем я удаляю данные из таблицы продуктов.

$sql_delete = 'DELETE FROM products WHERE category_id = '.$id;

Каждый продукт имеет уникальный идентификатор.Но я хочу сделать это безопасным способом, теперь, даже если строка не добавлена ​​в history_products, она будет удалена из таблицы продуктов.Я не хочу удалять, если вставка не удалась.

Ответы [ 3 ]

1 голос
/ 20 июля 2011

Я ожидал, что у вас есть поле с именем id (ProduktID), для которых продукты должны иметь одинаковый идентификатор в обеих таблицах, тогда должно работать следующее.

Удалить из продуктов, где products.id IN (Выберите history_products.идентификатор из history_products)

1 голос
/ 20 июля 2011
DELETE FROM products WHERE category_id IN (SELECT category_id FROM history_products)

Это приведет к удалению только тех записей в таблице продуктов, для которых в history_products существует соответствующая запись.

1 голос
/ 20 июля 2011

Если используются уникальные ключи, удалите все записи из продуктов, которые имеют те же ключи, что и в таблице истории.

...