2012-04-13 79 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