2011-10-12 85 views
-1

我有一個基於php瀏覽器的應用程序,用於醫院管理系統。情況是有3個部門從中進行支付,接待處,實驗室和藥房。上面每個位置的工作人員是不同的,他們的意見也是不同的。這些部門中的每一個都將收據信息發送到稱爲收據的單一表格,因此會生成一個ID,該ID是表格的最後一個ID之後的下一個ID。數據根據此ID(根據表中最後一個ID生成)發回給同一部門。避免在php中重複ID

現在,當兩個部門同時單擊提交按鈕時會發生問題。這兩個人都獲得相同的ID,因爲那時候的兩個查詢的最後一個ID是相同的。這會導致存儲數據並將數據發回給部門的問題。

現在有解決方案嗎?我被告知觸發器會解決它,但我不想去那裏並保持簡單。我想到隨機ID的產生,但醫院的人想要連續的ID,因爲它會出現在收據上。 還要考慮到系統不應該放慢(相當大)。

編輯:哎呀好像在這裏有很多更多的信息,因此Autoincrement不工作。 有3列要考慮,即。 id(Pkey),receiptno和debitno。 現在,如果該人同時付款,則id和receiptno將一起增加1,並且debitno將爲空。但是,如果他稍後付款,那麼他的receiptno將變爲NULL,而他的ID和debitno將從最後輸入的ID增加1。 因此,沒有必要將receiptno(即將發回給部門人員)填寫,因此自動增量將無法正確執行? 再次感謝您的解決方案esp autoincrement。

+0

赫克告訴你觸發器的人可以解決這個問題嗎?你需要停止聽他們。 –

+0

自從使用'auto_increment'主鍵列解決這個問題已經很久了。你使用什麼樣的id生成機制? – deceze

+0

你甚至認爲隨機ID是一個好主意? – ThiefMaster

回答

9

爲ID列使用AUTO_INCREMENT(MySQL)字段,因此數據庫負責生成唯一的ID。其他數據庫系統具有相似的領域, PostgreSQL中的serial字段類型。

+0

是的這是正確的,但爲了檢索數據,我必須檢查最後的ID並將其發回。如果兩者同時發送,則可能第一個請求獲得第二個請求的ID(信息) – Shakir

+2

如果在執行插入操作後直接檢索ID,則永遠不會發生。永遠。在執行插入操作後,您不是唯一需要檢索ID的人,並且此答案爲正確答案:) –

+0

http://us2.php.net/manual/en/function.mysql-insert-id .php –

1

我讀了你的問題的更新,你應該真的分解該數據庫。只是所以我明白 - 你需要創建一個具有唯一ID的新訂單。但訂單可能不會馬上支付,所以訂單付款時,還需要一個唯一的收據編號。你可能生成一個隨機數字接收,使該字段唯一,while-no-error更新數據庫中的字段。這非常糟糕。

你最好創建一個新的付款表。因此,您的訂單表將存儲自動增量訂單ID(根據TheifMasters答案)以及其他數據(如用戶ID,客戶ID,日期,描述等)。然後,您將擁有一個付款/交易表,該表可存儲paymentID(自動增量), orderID(與訂單表相關),付款日期,狀態,金額等。

這是跟蹤支付交易的首選方法。現在你知道從哪裏開始,你應該做一些關於如何真正實現這個的研究。我們使用關係數據庫是有原因的!

+0

是的大聲笑我同意,這將使其效率。我被要求改變現有的結構,這就是爲什麼我想要一個基本的解決方案本身。 我通常會被人告知的事情是它會讓系統變慢。會嗎?如果不是,那麼這是最好的解決方案。 該系統有很多組件,我擔心他會擔心繫統會變得遲鈍 – Shakir

+0

長話短說:它不會讓系統變慢。如果交易數據與訂單數據一起存儲,那是系統中的一個巨大缺陷。你不應該試圖解決缺陷,你應該試圖解決它們。付款和收據數據是非常重要的,所以如果有這個應用程序的一部分,你寫得很好,使它成爲這個部分。 –