相關

2012-12-06 39 views
0

MySQL數據庫我有兩個表:相關

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'); 
+0

請勿使用字符文字作爲數字.''2''是一個字符,而不是數字。如果'user_id'被定義爲例如一個整數,你應該使用'2' - 在這個值周圍沒有單引號。 –

回答

3

創建日期列上的鍵,然後用INSERT IGNOREINSERT ... ON DUPLICATE KEY UPDATE語法。更多信息請參閱:"INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE"

此外,您可能可以使用觸發器或過程而不是cron作業;可能會讓生活變得更輕鬆。

+1

我認爲觸發器是合適的技術 –

+0

我不能使用TRIGGER,因爲數據庫結構不是很好。 –

+0

@XiKam:程序怎麼樣? – cegfault

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);