4

我的数据库中有 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

当我更新表中的 *category_name* 时,categories我也想在Products表中更改它,但我不确定如何执行此操作。

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

任何帮助,将不胜感激。

我的 update.php 现在的样子:

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

应该是什么样子:???

{代码在这里}

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

4

8 回答 8

4

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

<?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
于 2012-04-13T12:23:20.000 回答
1
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
于 2012-04-13T12:23:35.243 回答
1

我建议您使用类别表的“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,您可以在类别表中进行任何您喜欢的更改,而不必担心您会丢失与任何其他表的链接(这是当前表会发生的情况)。

编辑:您可以通过使用诸如 INNER JOINS 之类的联接来获取有关类别的任何信息。我认为这将是一个更好的方法。此外,考虑在 products 表中的“category_id”列与类别表中的“id”列之间添加关系。这将确保一个类别不会在仍有产品链接时被删除。

于 2012-04-13T12:24:45.693 回答
1

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

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

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

于 2012-04-13T12:25:55.910 回答
0

我不知道你为什么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`
于 2012-04-13T12:26:49.407 回答
0

试试这个希望它有帮助

$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

于 2016-03-02T09:22:41.017 回答
-1

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

$sql = "UPDATE categorise c, product p SET category_name='$cate' ";
$sql = $sql. "WHERE c.id=p.id AND c.id like "."\"".$cate."\" ";
于 2015-05-04T12:58:39.863 回答
-1

简单使用下面的代码,希望这对你有用。

          $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));
          }
于 2020-04-29T10:31:24.557 回答