1

感谢您的关注!

背景

我几乎没有使用 LAMP 堆栈的经验,但我最近开设了一个使用基于 LAMP 堆栈的 OpenCart的在线商店。

商店允许我为客户分配奖励积分,我给每个新客户 10 分,只是为了创建一个帐户。

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

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

在 OpenCart 创建的数据库中,我有一个oc_customer包含我所有客户的表,然后我有一个oc_customer_reward表,它关闭客户 ID 并在每次客户获得积分时分配一条新记录。看起来是这样的:

oc_customer_reward

问题

如何编写一个 MySql 查询来查看表中是否不存在客户oc_customeroc_customer_reward如果他们不存在,然后在oc_customer_reward表中为该客户创建一条记录(价值 10 分)?

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

更新

根据奥拉夫的建议,我可以oc_customer_reward通过他建议的查询让所有客户不在表中:

SELECT customer_id
FROM oc_customer
WHERE customer_id NOT 
IN (
SELECT customer_id
FROM oc_customer_reward
)

现在,我只需要迭代该查询的结果(对不起,我不是数据库专家!)并oc_customer_reward为每个查询插入一行。有点像foreachC# 中的循环。有什么想法吗?

4

2 回答 2

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

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

于 2012-10-24T21:57:46.997 回答
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

于 2012-10-24T22:24:15.570 回答