如何使用 PHP 更新两个 MySQL 表


How to update two MySQL tables with PHP?

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

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表中更改它,但我不确定如何做到这一点。

我找不到并回答,因为我不知道如何正确措辞。

任何帮助将不胜感激。

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

     db_update("UPDATE category SET 
    `category_name` = '".$_POST['category_name']."'
     WHERE category_id = '".$id."'");

应该是什么样子:???

{代码在这里}

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

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

<?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'");
?>

如果要在一个字符串中执行此操作,可以使用多个查询、联接查询或存储过程执行此操作。

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

<?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';)
    ");
?>

联接查询:

<?php
mysql_query("
    UPDATE `product`,`categories`
    SET `product`.`category_name` = '" . $catname . "',
        `categories`.`category_name` = '" . $catname . "'
    WHERE `items`.`id` = '" . $catname . "'
");
?>

如果以上都不起作用,我建议更改您的表,以便没有匹配的名称,而是匹配的 ID。

您将获得以下内容:

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
UPDATE Categories t1 
JOIN Product t2 ON (t1.category_name  = t2.category_name ) 
SET t1.category_name = ?
    t1.category_name = ?
WHERE t1.id = ?

但是你觉得你的数据模型很丑陋。最好去规范化...

让产品表参考类别表:

Product Table - 
id | product | category_ID
Categories Table -
id | category_name

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

请考虑以下事项:

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_id"列与类别表中的"id"列之间添加关系。这将确保一个类别不会只是在仍然有产品链接到它时被删除。

当你有一个像你提到的产品和类别这样的关系时,最好有如下结构:

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

因此,每当需要显示产品的类别名称时,都可以使用联接来完成。因此,此更改将使您能够解决问题。

我不知道

为什么你在两个表中都有category_name,据我所知,这似乎毫无意义。

理想情况下,您的表结构应如下所示:

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

这允许您更改类别表中类别的名称,而无需更改产品表中的任何内容。

然后,您需要做的就是在 SELECT 查询中联接 2 个表,例如:

SELECT * FROM `categories`,`products` WHERE `categories`.`id`=`products`.`category_id`

试试这个希望它有帮助

$query = "UPDATE tblname SET colname = '$var';";
$query .="UPDATE tblname1 SET colname1 = '$var1';";
/* execute multi query */
if (mysqli_multi_query($conn, $query)) {
    do {
        /* store first result set */
        if ($result = mysqli_store_result($conn)) {
            while ($row = mysqli_fetch_row($result)) {
             printf("%s'n", $row[0]);
            }
            mysqli_free_result($result);
        }
        /* print divider */
        if (mysqli_more_results($conn)) {
            printf("");
        }
    } while (mysqli_next_result($conn));
}

http://php.net/manual/en/mysqli.multi-query.php

是的,我以前也遇到过这个问题。这是线索!请尝试此,

$sql = "UPDATE categorise c, product p SET category_name='$cate' ";
$sql = $sql. "WHERE c.id=p.id AND c.id like "."'"".$cate."'" ";

简单地使用以下代码,希望这对您有用。

          $sql = "UPDATE productSET category_name='$catname' WHERE id='$coode';";
          $sql .= "UPDATE categoriesSET category_name='".$catname."' WHERE category_name='$category_name';";
           if (mysqli_multi_query($db, $sql)) {
              do {
                  /* store first result set */
                  if ($result = mysqli_store_result($db)) {
                      while ($row = mysqli_fetch_row($result)) {
                        echo "Success";
                      }
                      mysqli_free_result($result);
                  }
                  /* print divider */
                  if (mysqli_more_results($db)) {
                      printf("");
                  }
              } while (mysqli_next_result($db));
          }