首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用PHP更新两个MySQL表?

问如何用PHP更新两个MySQL表?
EN

Stack Overflow用户
提问于 2012-04-13 20:18:51
回答 8查看 9.3K关注 0票数 4

我的数据库中有两个表,每个表都有一个名为Catergory的列。

代码语言:javascript
复制
Categories Table -
id | category_name
1  : basic
2  : midlevel
3  : highlevel
4  : profesional

Product Table - 
id | product | category_name
1  : adsl 1G : basic
2  : adls 2G : midlevel
3  : adsl 3G : highlevel
4  : adsl 4G : profesional

当我更新categories表中的*category_name*时,我也想在Products表中更改它,但我不确定如何做到这一点。

我找不到答案,因为我不知道如何正确表达。

任何帮助都将不胜感激。

我的update.php现在是什么样子:

代码语言:javascript
复制
     db_update("UPDATE category SET 
    `category_name` = '".$_POST['category_name']."'
     WHERE category_id = '".$id."'");

应该是什么样子的:?

{代码在这里}

注意:“已修复-我忘记将旧值发送到save.php文件,因此$id永远不知道要更新什么”。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-04-13 20:23:20

您可以只运行两个查询来更改这两个名称:

代码语言:javascript
复制
<?php
mysql_query("UPDATE categories SET category_name='" . $catname . "' WHERE category_name='basic'");
mysql_query("UPDATE product SET category_name='" . $catname . "' WHERE category_name='basic'");
?>

如果要在一个字符串中完成,可以使用多个查询、联接查询或存储过程来完成。

一个字符串中的多个查询:

代码语言:javascript
复制
<?php
    mysql_query("
        mySqlQuery(UPDATE categories SET category_name='" . $catname . "' WHERE category_name='basic';)
        mySqlQuery(UPDATE product SET category_name='" . $catname . "' WHERE category_name='basic';)
    ");
?>

联接查询:

代码语言:javascript
复制
<?php
mysql_query("
    UPDATE `product`,`categories`
    SET `product`.`category_name` = '" . $catname . "',
        `categories`.`category_name` = '" . $catname . "'
    WHERE `items`.`id` = '" . $catname . "'
");
?>

如果上述方法都不起作用,我建议更改您的表,这样就没有匹配的名称,而是匹配的ID。

您将看到以下内容:

代码语言:javascript
复制
Categories Table -
id | category_name
1  : basic
2  : midlevel
3  : highlevel
4  : profesional

Product Table - 
id | category_ID | product
1  : 1           : adsl 1G
2  : 2           : adls 2G
3  : 3           : adsl 3G
4  : 3           : adsl 4G
票数 4
EN

Stack Overflow用户

发布于 2012-04-13 20:23:35

代码语言:javascript
复制
UPDATE Categories t1 
JOIN Product t2 ON (t1.category_name  = t2.category_name ) 
SET t1.category_name = ?
    t1.category_name = ?
WHERE t1.id = ?

但是您感觉自己的数据模型很丑陋。去规格化可能更好。

让product表引用category表:

代码语言:javascript
复制
Product Table - 
id | product | category_ID

Categories Table -
id | category_name
票数 1
EN

Stack Overflow用户

发布于 2012-04-13 20:24:46

我建议您使用category表的'id‘字段将products表链接到categories表。这样,您将被链接到相同的类别,并且可以更改类别名称,而不必担心破坏其他任何内容,因为您仍将链接到相同的类别id。

请考虑以下几点:

代码语言:javascript
复制
Categories Table - id | category_name 1 : basic 2 : midlevel 3 : highlevel 4 : profesional

Product Table - id | product | category_id l : adsl 1G : basic 2 : adls 2G : midlevel 3 : adsl 3G : highlevel 4 : adsl 4G : profesional

你目前的方式似乎很难维护,因为将来你可能需要添加另一个以某种方式使用类别的列,并且必须不断地更改所有这些表的'category_name‘列,最终可能会非常混乱。通过链接到id,您可以在category表中进行任何您喜欢的更改,而不必担心丢失到任何其他表的链接(这就是当前表将发生的情况)。

编辑:您可以通过使用连接(如内部连接)来获取有关类别的任何信息。我认为这将是一个更好的方法。另外,考虑添加products表中的'category_id‘列与category表中的'id’列之间的关系。这将确保类别不会在仍有产品链接的情况下被删除。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10140685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档