2012-04-13 82 views
3

我在我的数据库中有2个表,每个都有一个名为Catergory的列。如何用PHP更新两个MySQL表?

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表我想改变它在Products表以及与* CATEGORY_NAME *,但我不知道如何做到这一点。

我找不到并回答,因为我不知道如何正确地使用它。

任何帮助,将不胜感激。

什么我update.php貌似现在:

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

应该是什么样子的:???

{代码在这里}

注:“固定 - 我忘了我的旧值发送到save.php文件,使$ ID从来不知道更新的内容”。

+1

应该是两个表中同一类别名称?如果不是,你能解释一下更新时需要发生什么吗?也许举个例子吧? – liquorvicar 2012-04-13 12:21:11

+0

使用连接,并更新两个表中的字段。 – Konerak 2012-04-13 12:22:26

+0

您应该简单地将参考关键字(category_id)放入产品表中,这将成为面糊。 – Chandresh 2012-04-13 12:24:15

回答

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 
+0

使用2个不同的套件更新它们不会帮助我我试过了,我需要一个字符串来更新这两个表。基本上,如果我更新类别表,它需要用新的格式化类别更新产品表。 – 2012-04-13 12:35:59

+0

我为答案添加了其他解决方案。那一个是一个字符串。 – 2012-04-13 12:51:32

+0

谢谢你现在工作!按照您的建议,我正在使用联合查询。 – 2012-04-13 13:16:06

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 
+0

+1用于解除归一化提示。 – 2012-04-13 12:46:54

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)来获取有关类别的任何信息。我认为这将是一个更好的方法。另外,请考虑在产品表中的'category_id'列与类别表中的'id'列之间添加关系。这将确保一个类别不会被删除,而仍然有产品链接到它。

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 

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

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 

这允许您更改类别表中的类别的名称,而不需要更改产品表什么。

所有,那么你需要做的是加入2个表中的SELECT查询,例如:

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

我在两张表中都有它,因为它们是我在一天结束时需要的两件不同的事情。我需要自己的类别,因为会有很多,他们会分开列出。但是每个类别都会有产品需要列在它们下面。 – 2012-04-13 12:33:14

+0

这是工作,只是一个简单的问题。当我把它发送给我的“update.php”时,我将如何使用它来更新我的SET? – 2012-04-13 12:40:40

0

是的,我用这个问题来遇到的为好。这里的线索!请试试这个,

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

您能否详细说明您的答案,并添加关于您提供的解决方案的更多描述? – abarisone 2015-05-04 13:18:04

1

试试这个希望它有助于

$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

+0

因为它的权利,我会投票,但几年后!大声笑!自从我这样做以来,我改变了自己的编码方式。但是,感谢你保持这个线程活着。 – 2016-03-07 14:43:29