2014-05-06 5 views
0

Я имею в вознаграждении базы данных точек таблицы:Удаление записей из базы данных MySQL на основе суммы баллов

customer_reward_id customer_id  order_id  points 
1      1    3    20 
2      1    4    40 
3      1    5    30 
4      1    6    30 
5      1    7    40 

Сбор 100 баллов (сумма) и удалить из таблицы

где customer_id = 1 порядка by customer_reward_id ASC

любая идея?

+2

Ваш вопрос непонятен. 'I хочу суммировать и удалять только 100 пунктов' Что это значит? – Jenz

+0

Я хочу суммировать и удалять только 100 очков ??? Что вы подразумеваете под этим? –

+0

выберите только 100 баллов и удалите! почему не понятно? –

ответ

0

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

Например выполните следующие действия:

Вставка новой записи с отрицательным значением.

insert into reward_points (customer_id,order_id,points) values (1,8,-100); 

Затем суммируйте общую сумму, как указано ниже.

select sum(points) as total_rewards where customer_id=1; 

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

Надеюсь, это поможет вам в этом.

+0

Спасибо, человек, помог мне много –

+0

Добро пожаловать. Удостоверьтесь, что вы сохраняете целостность записей :-) – Sutha

1

Если речь идет об удалении записи для клиента, у которого есть 100 баллов или более (суммировано). Вот запрос:

delete from rewards_points 
where customer_id in (
    SELECT customer_id 
    FROM (select * from `rewards_points`) dummy 
    group by customer_id 
    having sum(points)>=100); 

Примечание: В MySQL вы не можете указать ту же таблицу в from пункте непосредственно, в котором вы выполняете операцию удаления/обновления. Итак, в этом ответе я добавил дополнительный подзапрос и указанный псевдоним dummy

+0

Но если общее количество более 100 баллов будет удалено все –

+1

Он удалит точки клиента, если у него есть> = 100 баллов. Из вашего вопроса это то, что я понял. Если вы хотите уменьшить количество баллов для клиента, вам нужно добавить еще одну запись с точками -ve. Скажите, что именно вам нужно? –

+0

Я хочу удалить только 100 баллов. Я понимаю решение теперь вставить -100 баллов –

Смежные вопросы