2013-04-25 106 views
1

我有一個場景,我不知道該怎麼做。將值存儲在兩個MySQL表中

我有一個網站,用戶可以更新他們的狀態。我允許使用散列標籤,以便可能的用戶帖子可能看起來像:

今天去偉大的徒步旅行! #hiking

現在,我打算到後存儲在一個適當命名的,其結構是這樣的「帖子」表:

post_id | user_id | text | date 

現在,當用戶提交其持有的文字後我跑的形式一個腳本來創建一個數組來獲取用戶使用的所有散列標記項,然後將它們存儲在一個數組中。 然後,我可以循環訪問該數組,並將標籤插入恰當命名的「TAGS」表中。現在這個表的結構是這樣的:

tag_id | post_id | user_id | tag 

與此唯一的問題是我不知道的帖子POST_ID,直到我將數據插入到的「信息」表後(POST_ID是主鍵並且是自動增量)。 現在,我想我可以從該用戶的「POSTS」表中選擇最後一行數據(插入帖子後),然後依次使用返回的post_id作爲我的查詢,將標記數據插入到「標籤」表。這似乎不是最好的方式?我的問題是:

這是最好的解決方案還是有更好的方法去解決這種情況?

我是Stack Overflow的新品牌,所以請不要投票給我。評論並告訴我我做錯了什麼,我會學習並提出更好的問題。

感謝

+0

創建一個插入/更新Post的PHP函數會更簡單嗎?這個函數也會創建/刪除舊的標籤嗎? – 2013-04-25 16:27:46

+1

「不投票」我們呢?大部分時間我們都很友善 – boisvert 2013-04-25 16:44:36

回答

0

在這兩個表中都有一個新列 - unique_id - 它包含您在查詢數據庫之前在代碼中生成的字符串。這樣您就可以在提交之前將帖子和標籤綁定在一起。我一直使用這種方法進行類似的應用。

唯一的問題是唯一性,但有多種方法可以生成唯一的ID(我通常使用時間戳和散列混合)。

+1

這是我的一個想法,我很高興你這樣說!謝謝! – user2320500 2013-04-25 16:35:26

1

你可以得到最後insterted ID得很乾脆: mysql_insert_id(),如果你不使用PDO或使用功能lastInsertId()如果你這樣做。

0

這種依賴於你正在使用的是哪個版本的mysql,以及你想如何組織你的代碼。

選項1.按照你所說的去做。 PHP將包含管理數據庫的代碼以及數據如何存儲到數據庫中。我所看到的唯一缺點是,如果在處理hashtags時存在問題,那麼可能會有一個插入數據庫的帖子,但是hash部分沒有成功完成。對於某些應用程序(如銀行賬戶),這可能是不可接受的,這是數據庫事務處理的目的。

選項2.處理此問題的另一種方法是編寫一個執行插入和處理哈希標記的mysql存儲過程。存儲過程也可以將整個事件包裝在一個事務中,以便數據庫保持一致。請注意,這需要支持存儲過程的mysql版本。這樣做的壞處是你必須在MySQL中編寫,這與PHP不同。

mysql和PHP都可以處理這個應用程序邏輯/數據存儲邏輯。這是你想如何組織代碼的問題。我寧願保持圖層不同。即使你要在PHP中這樣做,至少也要有一個單獨的類來處理數據庫,而不是做其他任何事情。當你的代碼變得更大時,有一個單獨的類或模塊或命名空間來管理這些類型的代碼,這使得它們更易於更改和測試。