Дак так и организовывай. Первое что пришло, таблицы:
orders: order_id, user_id, order_status, order_date
order_items: order_id, item_id, item_quantity (первичный ключ по ордер_ид + товар_ид)
Тоесть таблица ордер выступает просто как корзина, если статус заказа не равно например "оплачен", то юзер работает и дальше с этим ордером, может добавлять или удалять товар.
SELECT `users`.`user_id`, `orders`.`order_id`, `order_items`.`item_id`, `order_items`.`item_quantity`
LEFT JOIN `orders` ON (`orders`. `user_id` = `users`.`user_id` AND `orders`.`order_status` = "Не оплачен" )
LEFT JOIN `order_items` ON (`order_items`.`order_id` = `orders`.`order_id`)
FROM `users` WHERE `users`= 5;
Ну и цены также можно либо джоином из отдельной таблицы по итем_ид брать, либо сразу в заказ записывать с учетом скидок, чтоб по 10 раз не пересчитывать.