2011-06-24 62 views
0

我有婚禮的RSVP表格。我有2個表格(mainguest)。表main有主要客人,表guest有關聯的客人包括在該方。我能夠使用INNER JOIN來拉他們,但我無法使用UPDATE他們都提交相同的提交。INNER JOIN的更新

我的表設置是這樣的:

main

id | firstName | lastName | meal | rsvp 

guest

id | guestFirstName | guestLastName | guestMeal | guestRsvp | mainID 

我的更新是這樣寫的:

$$updateGuests = "UPDATE guest.id 
        SET guestMeal = '$guestMeal', 
         guestNotes = '$guestNotes', 
         guestAccept = '$guestAccept' 
        WHERE guest.mainID = '$id'"; 
mysql_query($updateGuests); 

某些派對將會超過2人(主要客人,來自guest桌子的1-3位相關客人)。我試圖用'提交'來更新他們所有的信息

+0

你應該只在Update關鍵字後面寫一個表名而不是一些guest.id。 –

回答

0

如果我理解你的問題,你想更新他們與main.ID匹配的所有客人記錄。你應該能夠做到這一點沒有內部連接,如下所示:

UPDATE guest 
    SET guestMeal ='$guestMeal', guestNotes = '$guestNotes', 
     guestAccept = '$guestAccept' 
    WHERE guest.mainID ='$id' 

這將更新所有的誰鏈接到你的主記錄ID的客戶記錄。

0

一般更新查詢語法(你正在嘗試做的)就像是

UPDATE [table-name] 
    SET field-name1 = value1, 
    SET field-name2 = value2, 
    SET field-name3 = value3 
    WHERE some-condition 

你有更新的查詢是一點點了。

1

從MySQL的論壇:Re: UPDATE multiple tables with one UPDATE statement
從MySQL參考:12.2.10. UPDATE Syntax

我會假設你的PHP代碼是對

$updateGuests = 
    "UPDATE 
     main M LEFT JOIN guest G ON M.id = G.mainID 
    SET 
     G.guestMeal = '$guestMeal', 
     G.guestNotes = '$guestNotes', 
     G.guestAccept = '$guestAccept', 
     M.meal = '$something' 
    WHERE G.mainID = '$id'"; 

東西線以上,當然,也不會爲guest表上實際不存在的行工作 - 畢竟它是一個UPDATE。假設你有辦法從提交的數據(可能是他們的id或訪客表?)中鏈接特定的訪客和他們的數據,你可以通過循環執行選擇性更新,然後將CASE語句附加到查詢中以更新所有的註冊客人一次:

$sql = 
    "UPDATE 
     main M LEFT JOIN guests G ON M.id = G.mainID 
    SET 
     M.meal = '$something' 
     "; 

for ($i=0; $i < count($yourArrayHere); $i++) { 
    /* ... code to extract values from array here ...*/ 
    $sql .= 
    ", G.guestMeal = CASE G.id WHEN '$guestID' THEN '$guestMeal' END 
    "; 
} 

$sql .= "WHERE M.id = '$id'"; 

以上是基於你確實需要一些數據來更新主要表假設寫的。由於它每次在邏輯上都是單行,因此它顯示在查詢的頂部。循環中的部分是靜態的 - 所以如果您的提交數據中始終有一組嚴格的填充字段,則只需添加您的字段即可。如果不是這樣,您可能希望通過添加一種方法將表單字段名稱轉換爲數據庫字段名稱,然後一般修改字符串以追加到目標字段上的$ base sql語句以及源var - 變量變量($$ var)是實現這一點的一種方法。然後,您將保留基於G.id的CASE語句(當然,還假設其中一個關鍵字段是您爲了唯一標識子表的行而強制使用的關鍵字段)。

當然,你也想需要提取的for循環你想要的變量,然後要使用他們,因爲我已經在代碼中使用上述

更容易做的比說。

+0

謝謝!我一直在關閉這個項目的這一部分! – joolz84