0

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

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

毎晩実行される CRON ファイルがあります。「daily_purchase」テーブルからの毎日の購入をカウントし、「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');

ただし、挿入する前に、ある日付「purchase_date」の user_id = 2 の購入情報が既に挿入されているかどうかを確認する必要があるため、再度挿入する必要はありません。

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

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

3 に答える 3

0

INSERT IGNOREステートメントを使用できます。そのためには、とに一意のキーが必要user_idですdate。次に、次のクエリは、キーが存在しない(その日付のエントリがないユーザーを意味する)値のみを挿入し、他のユーザーに警告を発行しますが、ここでは無視できます。

INSERT IGNORE INTO
    purchase_mis(user_id, total_purchased, date)
( SELECT
    user_id,
    COUNT(*),
    purchase_date
FROM daily_purchase
GROUP BY user_id );
于 2012-12-06T09:41:18.097 に答える
0

このようなことを試してください。

INSERT INTO purchase_mis(user_id, total_purchased, date)
SELECT user_id, purchase_date, count(*)
FROM daily_purchase a
LEFT OUTER JOIN purchase_mis b
ON a.user_id = b.user_id
AND a.purchase_date = b.date
WHERE b.user_id IS NULL
GROUP BY user_id, purchase_date
于 2012-12-06T09:46:05.383 に答える
0

これを使って

INSERT IGNORE INTO
    purchase_mis(user_id, total_purchased, date)
VALUES
    ('2', 'purchase_count', 'purchase_date');
于 2012-12-06T09:38:14.823 に答える