Заранее простите за небольшой оффтопик.
[вопрос, который должен был быть в другом топике]
По теме:
Полностью согласен, что создавать отдельные таблицы для каждого заказа - это бред.
Создай таблицу cart с такими полями:
session_id, item_id, quantity ну и ещё другими, какие посчитаешь нужными.
При добавлении товара в корзину, добавляй в эту таблицу записи с идентификатором текущей сессии, идетификатором товара, который юзверь сунул в корзину, и кол-вом этого товара в корзине.
По поводу сбора мусора - используй собственный garbage collector. Ты наверняка уже работал с ним, если использовал [p]session_set_save_handle[/p] для хранения сессий в БД.
Твой гербедж коллектор должен записывать айдишники всех удаленных сессий, а потом удалять из таблицы cart все записи, в которых поле session_id совпадает с идентификатором любой из удаленных сессий.
Оговорюсь, что ишопы я никогда не писал, поэтому на практике такой способ не применял. Если что, пусть меня образумят профи, потому что чует моё сердце - скоро надо будет писать именно ишоп