在MySQL中,如何根据连接条件进行插入?

时间:2012-10-24 21:51:44

标签: mysql sql opencart

感谢您的期待!

背景

我几乎没有使用LAMP堆栈的经验,但我最近开始使用基于LAMP堆栈的OpenCart online store

商店允许我为客户分配奖励积分,我为每个新客户提供10点积分,仅用于创建账户。

不幸的是,OpenCart管理GUI只允许我一次手动执行此操作。

但是,我可以访问一个允许我运行MySql命令的界面,我想用这种方法解决问题。

在OpenCart创建的数据库中,我有一个oc_customer表,其中包含我的所有客户,然后我有一个oc_customer_reward表,用于键入客户ID并为每个客户ID分配一个新记录客户获得积分的时间。这是看起来像:

oc_customer_reward

问题

如何编写MySql查询,查看oc_customer表中是否存在来自oc_customer_reward的客户,如果他们不存在,则在{{1}创建一条记录那个客户的桌子(价值10分)?

我不是要求工作代码(除非你真的想提供它),我愿意自己做这项工作,但坦率地说我不知道​​从哪里开始。方法是什么?

更新

Per Olaf的建议,我能够让所有客户不在oc_customer_reward表中,并提供他建议的查询:

oc_customer_reward

现在,我只需要迭代该查询的结果(抱歉,我不是数据库人员!)并在SELECT customer_id FROM oc_customer WHERE customer_id NOT IN ( SELECT customer_id FROM oc_customer_reward ) 中为每个人插入一行。有点像C#中的oc_customer_reward循环。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

首先找不到奖励表中的客户:

select customer_id from oc_customer
    where customer_id not in (select customer_id from oc_customer_reward);

然后接受并在奖励表中插入一个条目:

insert into oc_customer_reward (customer_id, points)
    select customer_id, 10 from oc_customer
        where customer_id not in (select customer_id from oc_customer_reward);

这未经过测试,但我希望它有助于一个开始。

答案 1 :(得分:0)

没有测试并且不确定oc_customer的表结构,但是以下查询应该可以帮助您

INSERT INTO oc_customer_reward ( customer_id, description, points, date_added ) 
 SELECT customer_id, 'reward for registration', 10, CURRENT_TIMESTAMP FROM oc_customer WHERE NOT EXISTS ( SELECT * FROM oc_customer_reward r WHERE r.customer_id = oc_customer.customer_id );

有关您可以在此处找到的EXISTS声明的更多详细信息

http://dev.mysql.com/doc/refman/5.5/en//exists-and-not-exists-subqueries.html