Сейчас точно не вспомню, но кажется в функции fn_delete_order закомментировал вызов функции fn_change_order_status (можно только на время удаления заказов, но так как я удалятю только старые заказы, то просто оставил это изменение насовсем), после этого заказа удаляются без изменения количества товаров, присутствующих в заказе.
Все что содержит session можно снести (всех разлогинит, потрутся корзины).
Остальное нужно, но для заказа много лишней информации в БД хранится, была тут где-то тема. Поэтому там как-то выборочно все надо чистить
Я периодически чищу order_details. Удаляю записи, относящиеся к старым заказам. Оставляю только о заказах за последние несколько месяцев. Ни разу еще эта удаленная информация не потребовалась. При необходимости можно сначала сделать резервную копию тех записей, которые будут удалены. В архиве копия будет мало места занимать. Но я даже копию не делаю. На целостность БД эта таблица не влияет, так как на нее нет отсылок в других таблицах.
Как-то так я думаю удалять (фрагмент) по крону
$db_save_time = time() - 86400 * 45; // 45 days
$db_query1 = "DELETE FROM cscart_order_data WHERE EXISTS (SELECT * FROM cscart_orders WHERE cscart_order_data.order_id = cscart_orders.order_id AND cscart_orders.timestamp < " . $db_save_time . ");";
$db_query2 = "DELETE FROM cscart_order_details WHERE EXISTS (SELECT * FROM cscart_orders WHERE cscart_order_details.order_id = cscart_orders.order_id AND cscart_orders.timestamp < " . $db_save_time . ");";
Сейчас хотела почистить базу этим запросом. Выдает, что обработано 0 строк. Почему так может быть? Номер заказа ввожу верный, данные в базе есть по заказам, которые меньше номером.