2010-10-02 16 views
1

快速背景信息:與此問題相關的三個數據庫表中,一個存儲設備信息(d.id, d.name),第二個存放第一個表中的設備附件(a.ida.name),第三個表格處理前兩者之間的關係(d.id,a.id)。使用複選框來管理前端兩個數據庫表之間關係的有效方法?

通過從下拉框中的所有配件列表中選擇可用的設備之一正在顯示,每一個複選框被選中或未不是基於關係表中的數據。

這使我們想到了我的問題:我不確定檢查表單提交後哪些複選框已被更改,以及查詢數據庫的最有效方式是什麼是最有效的方式,因爲對於同一個提交的表單可能需要INSERT s和DELETE s(即,在提交之前,用戶取消選中選中的複選框並檢查未選中的單詞 - whoa,該短語應該是詞典練習)。順便說一句,我不想​​用複選框,但我認爲這將是一個乾淨的方式來處理這個問題。任何建議和概念證明代碼將不勝感激!

謝謝大家提前!

回答

2

如果您在複選框下方有「提交」按鈕,只需通過POST或GET將表單發送到服務器,無論您需要什麼。

如果您想要動態更改數據庫,請使用AJAX和onClick以及複選框。 (當用戶取消選中時,將更改的複選框值('false')發送到PHP腳本,它將進行DELETE查詢。如果複選框的值爲'true',它將觸發INSERT查詢。

對於AJAX發送,你可以使用jQuery(最終會用更少的代碼)

+0

有趣的是,儘管應用程序嚴重依賴於jQuery和AJAX,但我從來沒有想到我可以一個接一個地處理關係。感謝您的建議! – 2010-10-02 13:16:31

+0

沒有反對這種方法。但應該指出的是,您只是添加了對前端技術的依賴來管理您的數據關係。儘管99%的桌​​面瀏覽器支持JavaScript,但還有很多其他設備不支持JavaScript。你仍然應該解決你最初的問題 - 提交表格 - 然後逐步添加上面的內容。 – 2010-10-02 13:29:41

+0

@Jason McCreary - 我完全同意。然而,這是針對定製軟件的管理面板而不是公開的,因此不必擔心沒有啓用JS的瀏覽器/設備。 – 2010-10-02 13:37:27

2

在產品和配件之間的橋/連接表上查看REPLACE INTO。這是MySQL中使用不足的寶石。

否則,如你所說,你可以DELETE然後INSERT一切。但是如果你有任何額外的外鍵,這可能會變得混亂。然而,最終它似乎是最常見的方式,無論好壞。

如果您確實有外鍵,您可以傳遞一個包含以前檢查過的附件的id的附加字段,並通過將它們與提交的表單數據進行比較來處理這些字段。我只建議你這樣做,如果你的橋表中有其他交易數據很重要。

+0

謝謝你的建議!我以前從來沒有使用過'REPLACE INTO',所以我一定會研究它。沒有外鍵,表格就像我描述的那樣簡單。但是,我仍然不確定如何在構建數據庫查詢之前檢查哪些複選框已更改。我正在考慮將它們的初始狀態作爲'1'和'0'在他們的'name'屬性中的某個地方傳遞,但它看起來有點混亂,我想可能有一種更優雅的方式來實現它。 – 2010-10-02 13:03:21

+0

最後,如果這些表格如您所描述的那樣,則不需要優雅。只需「刪除」和「插入」。這是原始的,但完成工作,如果你看任何框架,這是他們在底層做的。並不是說它使它更好;) – 2010-10-02 13:26:22

相關問題