感谢您的期待!
我几乎没有使用LAMP堆栈的经验,但我最近开始使用基于LAMP堆栈的OpenCart online store。
商店允许我为客户分配奖励积分,我为每个新客户提供10点积分,仅用于创建账户。
不幸的是,OpenCart管理GUI只允许我一次手动执行此操作。
但是,我可以访问一个允许我运行MySql命令的界面,我想用这种方法解决问题。在OpenCart创建的数据库中,我有一个oc_customer
表,其中包含我的所有客户,然后我有一个oc_customer_reward
表,用于键入客户ID并为每个客户ID分配一个新记录客户获得积分的时间。这是看起来像:
如何编写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
循环。有什么想法吗?
答案 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