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