Mysql PHP 查询更新
Posted
技术标签:
【中文标题】Mysql PHP 查询更新【英文标题】:Mysql PHP query updation 【发布时间】:2010-11-11 20:20:15 【问题描述】:我有两个表 cstomers 和 orders 表。 这些表包含 20,000 条记录
我需要的是根据电子邮件使用 customer_id 更新订单表。 我可以使用子查询和 php 或者它可以使用单个查询和有效的方法来完成吗?
客户表
id email name
--------------
1 | email1 | name1
2 | email2 | name3
3 | email3 | name3
订单表
order_id customer_id email product name group_id
-------------- -----------------------------------------
1 1 email1 prod1 0
2 (NULL) email1 prod1 1
3 1 email1 prod1 0
4 (NULL) email2 prod1 1
5 2 email2 prod1 0
6 2 email2 prod1 1
7 (NULL) email2 prod1 1
2 (NULL) email1 prod1 1
group_id =0 表示客户有账号
group_id =1 表示客户没有账号
【问题讨论】:
你能再清楚一点。你先写 group_id = 1 表示用户有账户,在orders表之后你写 group_id = 1 表示用户没有账户。group_id
的含义在两个地方其实是一样的;它只是格式奇怪。我根据原文进行了编辑,格式更简洁。
group_id = 0
对“没有”帐户有意义吗?如果其他人查看@数据,只会让人感到困惑。
【参考方案1】:
UPDATE customers c INNER JOIN orders o ON o.customer_id = c.id
SET o.customer_id = c.id
WHERE o.email = c.email
应该这样做。因为这是一个INNER JOIN
,所以它不会更新customers
表中不存在的用户帐户的订单。
【讨论】:
他想“根据电子邮件用 customer_id 更新订单表”。这是通过 SET o.customer_id = c.id WHERE o.email = c.email. 作为一般规则,要能够编写这样的 UPDATE 语句,您应该首先编写一个 SELECT 语句来连接您需要的表,然后只需将 SELECT 替换为 UPDATE 并在 WHERE 之前添加 SET 子句.幸福!【参考方案2】:也许这个(未经测试)
UPDATE orders o SET o.customer_id = (SELECT c.customer_id FROM customers c WHERE c.email = o.email)
【讨论】:
以上是关于Mysql PHP 查询更新的主要内容,如果未能解决你的问题,请参考以下文章