2010-01-01 54 views
0

我有一個網站,人們可以在其中創建一個包含兩列(word_1word_2)的未知長度表,並將此表存儲在數據庫中。通過遍歷行來將這些值插入數據庫當然很簡單。更新數據庫表的最快方法

現在有人決定更新一些值,然後他轉到編輯頁面,他在表格中找到<input/> -fields中的所有行。當他編輯內容,添加另一行或刪除一行時,更新這些值的最快方法是什麼?

例如,這是它被創建後的表:

 [word_1  ] [word_2  ] 

1. [foo   ] [bar   ] 
2. [something  ] [more   ] 
3. [another  ] [row   ] 
... 
600. [another_value ] [blabla  ] 
601. [last   ] [row   ] 

然後有人決定編輯:

1. [foo   ] [bar   ] 
2. [changed_val ] [more   ] 
... 
234. [another_change] [changed_value] 
... 
600. deleted 
601. [last   ] [row   ] 
602. [new_row  ] [new_value ] 

我想我的HTML代碼如下所示:

<table> 
    <tr> 
     <td> 
      <input type="hidden" name="row[0][id]" value="id-2" /> 
      <input type="text" name="row[0][word_1]" value="value_1" /> 
     </td> 
     <td> 
      <input type="text" name="row[0][word_2]" value="value_2" /> 
     </td> 
     <td> 
      <img src="img.gif" onclick="delete_row()" /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <input type="hidden" name="row[1][id]" value="id-5" /> 
      <input type="text" name="row[1][word_1]" value="value_1" /> 
     </td> 
     <td> 
      <input type="text" name="row[1][word_2]" value="value_2" /> 
     </td> 
     <td> 
      <img src="img.gif" onclick="delete_row()" /> 
     </td> 
    </tr> 
</table> 

是否有一個更好的方式來更新表,而不是去槽每個這些行,並檢查一個曲線如果當前行已編輯,是否爲紅色?查看一行是否被刪除的最佳方法是什麼?

我知道這個數據很容易存儲在XML中,但我更喜歡數據庫,所以我可以將數據從其他表和用戶等鏈接在一起。

+0

如果這是人們在網頁上編輯的東西,那麼我們在這裏談論的數據量是多少?最快的方法可能會增加更多的複雜性。 – 2010-01-01 19:48:55

回答

2

可能最快的方法,假設表格將會變得很大,將會用一個查詢將整個事物拖入內存,循環比較這些行並根據需要進行更新。

更好的辦法是做一些動態的事情,在查詢被動態地發送到數據庫時,因爲行是使用AJAX調用編輯的。

+0

嗨Peter, 使用AJAX進行編輯時更新是一個好主意,但沒有想過!把整張桌子拉進內存的手段,把它放在一個$ _SESSION? – Harmen 2010-01-01 19:30:27

+0

你可以把它放在$ _SESSION中,但任何變量都可以。一旦它在本地內存中,那麼您可以比進行大量的單個查詢更快地處理數據。您需要試驗性能以瞭解未來的發展方向。 類似於: $ result = mysql_query(「select * from table」,$ conn); while($ row = mysql_fetch_assoc($ result)){ $ data [] = $ row; } – 2010-01-02 20:44:57

1

你可以使用delete_row(),每一個delete_row時,它會保持在一個js變量,並在年底,當用戶點擊更新按鈕中的數據時該單詞的id,你知道要更新的行

var deletedRows = new Array(); 
var numberOfRowsDeleted = 0; 
function delete_row(row_id) 
{ 
    deletedRows[numberOfRowsDeleted] = row_id; 
    numberOfRowsDeleted++; 
}