2011-10-12 72 views
-1

私は病院管理システム用のPHPブラウザベースのアプリケーションを持っています。状況は、支払いが行われる3つの部門があるということです。受付、ラボ、薬局などがあります。上記の各場所の作業員は異なっており、入力も同じです。これらの部門のそれぞれは、領収書情報を領収書と呼ばれる1つのテーブルに送信するため、テーブルの最後のIDの次のIDであるIDが生成されます。データはこのIDに基づいて(テーブルの最後のIDに基づいて生成された)同じ部門に送り返されます。 2つの部門が同時に送信ボタンをクリックしたときにPHPでIDの重複を避ける

今、問題が発生します。その時点で両方のクエリで最後のIDが同じであるため、これらの人は同じIDを取得します。これにより、データを部門に保管して返送する際に問題が発生します。

これには解決策がありますか?私はトリガーがそれを解決するだろうと言われましたが、私はそこに行かず簡単に​​したいと思っていません。私はランダムなID生成を考えましたが、病院の人は領収書に表示されるように連続IDを求めています。 システムが(かなり)遅くならないように考慮してください。

編集:ここので、自動インクリメントが動作していない多くの情報があるようおっとは思えます。 3つの列があります。 id(Pkey)、receiptno、およびdebitno。 その人が同時に支払った場合、idとreceiptnoは1つずつ増加し、debitnoは空になります。しかし、彼が後で支払うつもりなら、領収書はNULLになりますが、IDとデビットノーは最後に入力されたIDから1つ増えます。 したがって、領収書番号(部門担当者に送付される予定)が記入される必要はないので、自動増分は正しく機能しないでしょうか? あなたのソリューションのesp autoincrementをもう一度おねがいします。データベースは、ユニークなIDの生成の面倒を見るよう

+0

トリックがあなたにこれを解決できると言ったのは誰ですか?あなたは彼らの話を聞くのをやめる必要があります。 –

+0

これは 'auto_increment'主キー列で解決されて以来ずっと問題です。どのようなID生成メカニズムを使用していますか? – deceze

+0

そしてあなたはどのようにしてランダムなIDを良いアイデアとみなしましたか? – ThiefMaster

答えて

9

は、ID列にAUTO_INCREMENT(MySQLの)フィールドを使用します。他のデータベースシステムも同様のフィールドを有する。 PostgreSQLのフィールドタイプはserialです。

+0

はいこれは正しいが、データを取得するために、私は最後のIDを確認し、それを返す必要があります。両方が同時に送信された場合、最初の要求が2番目の要求のID(情報)を取得する可能性があります – Shakir

+2

挿入が実行された直後にIDを取得すると、それは起こりません。これまであなたは、挿入が実行された後にIDを取得する必要がある唯一の人ではありません。この答えは正しい答えです:) –

+0

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

1

私は、あなたの質問にアップデートを読んで、あなたは本当に、そのデータベースを分割する必要があります。ちょっと分かりました。一意のIDで新しい注文を作成する必要があります。しかし、注文はすぐには支払われないかもしれないので、注文が支払われるときには、それに一意の受領番号が必要です。 は、受信用に乱数を生成し、フィールドを一意にし、エラーが発生してもデータベース内のフィールドを更新することはできません。これはひどくおかしいです。

あなたは支払いのための新しいテーブルを作成したほうが良いと思います。つまり、注文テーブルには自動インクリメントされた注文ID(TheifMastersの回答ごと)と、その他のデータ(userID、customerID、日付、説明など)が格納されます。次に、paymentID(自動インクリメント) (バックOrdersテーブルに関する)オーダーID、支払い期日、ステータス、量などなど

これは、支払取引を追跡する好ましい方法です。これから実際にどのように実装するかについての研究をすべきです。我々は、理由のためにリレーショナルデータベースを使用しています!

+0

はい笑私はそれが効率的になると思います。私は既存の構造に変更を加えるように頼まれました。 私は主にその人によって返されたことは、システムが遅くなるということです。それは?そうでなければ、これが最良の解決策です。 システムには多くのコンポーネントがあり、システムが遅くなる恐れがあることを心配しています。 – Shakir

+0

ロングストーリーは短く:システムを遅くすることはありません。トランザクションデータが注文データとともに格納されていると、システムに大きな欠陥があります。欠陥を扱うべきではありません。欠陥を修正しようとするべきです。お支払いと領収書のデータは非常に重要ですので、このアプリケーションの一部が正しく書いてある場合は、この部分にしてください。 –

関連する問題