0

I have two tables:

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

I have a CRON file that runs every night, it counts the daily purchase from the "daily_purchase" table and runs insert into "purchase_mis".

For example:

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

This returns the purchase_count for every user and then it will be inserted to the "purchase_mis" table.

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

But before inserting, it needs to check if the purchased information of user_id = 2 for some date "purchase_date" has already been inserted so it should not be inserted again.

I want something like the below query:

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 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 回答
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 回答