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 查询更新的主要内容,如果未能解决你的问题,请参考以下文章

使用php进行mysql查询更新

更新查询使 Codeigniter PHP 中 MySQL 的记录为空

如何使用表值来驱动使用 PHP 的 mySQL 查询

更新查询更新不起作用

PHP 中的 MySQL 查询不再有效

PHP查询MYSQL数据库,没有数据