0

私は2つのテーブルを持っています:

purchase_mis(id, user_id, total_purchased, date)
daily_purchase(id, user_id, product_id, paid_amount, purchase_date)

私は毎晩実行するCRONファイルを持っています。それは"daily_purchase"テーブルからの毎日の購入を数えて実行しinsert into "purchase_mis"ます。

例えば:

SELECT
    COUNT(*) AS purchase_count,
    purchase_date
FROM daily_purchase
GROUP BY user_id;

これにより、すべてのユーザーが返さpurchase_countれ、テーブルに挿入され"purchase_mis"ます。

INSERT INTO
    purchase_mis(user_id, total_purchased, date)
VALUES
    ('2', 'purchase_count', 'purchase_date');

user_id = 2ただし、挿入する前に、ある日付 " "の購入情報purchase_dateが既に挿入されているかどうかを確認する必要があるため、再度挿入しないでください。


以下のクエリのようなものが必要です。

INSERT INTO
    purchase_mis(user_id, total_purchased, date)
VALUES
    ('2', 'purchase_count', 'purchase_date')
WHERE date NOT EXISTS (SELECT date FROM purchase_mis WHERE user_id = '2');
4

2 に答える 2

3

日付列にキーを作成し、INSERT IGNOREorINSERT ... ON DUPLICATE KEY UPDATE構文を使用します。詳細については、「INSERT IGNORE」と「INSERT ... ON DUPLICATE KEY UPDATE」を参照してください。

また、おそらく cron ジョブの代わりにトリガーまたはプロシージャーを使用できます。生活が少し楽になるかもしれません。

于 2012-12-06T06:20:02.310 に答える
0
insert into purchase_mis
   (user_id, total_purchased, date)
select * 
from (
   select 2 as id, 
          100 as user_id, 
          str_to_date('2012-12-04', '%Y-%m-%d') as purchase_date
) t 
where not exists (SELECT 1 
                  FROM purchase_mis pm
                  WHERE pm.user_id = t.id 
                  and pm.date = t.purchase_date);
于 2012-12-06T19:56:32.367 に答える