1

かなり長い間検索しましたが、質問に対する答えが見つかりませんでした。まず、私の質問がどこから来たのかを説明させてください。

私は、ユーザーが利用可能な曜日とその日のオフィス時間を指定できるユーザーフォームを持つ Web アプリケーションを持っています。これを、mo-su のチェックボックスと、チェックボックス/日ごとに随時ドロップダウンを含む Web フォームと想像してください。ユーザープロファイルがデータベーステーブルに挿入された場合、テーブルには次のようなものがあります。

idUser | idDay | fromTime | toTime

     1 |     0 |    08:00 |  09:00

(この例では、0 は月曜日を表します (0=mo - 6=su))

もちろん、ユーザープロファイルを変更する機能があります。したがって、最初にユーザーが午前 5 時から午後 3 時まで利用可能だった可能性があります。これでプロファイルが変更され、ユーザーは月、金は午前 5 時から午後 3 時まで、私たちは午後 1 時まで、土は午前 9 時から午後 5 時までのみ利用できるようになりました。この場合、既存のエントリを更新して、削除されたエントリを削除する必要があります。 (この例では tue) をクリックして、新しい利用可能な日を挿入します。

現在、最初にユーザーのすべてのエントリを削除し、新しい挿入を実行します。これは非常に簡単で、この場合はおそらく最善の方法です (ユーザーごとに最大 7 つのエントリがあるため)。しかし、クエリを最適化したほうがよい別の状況でも同じ問題が発生する可能性があります。

最後に私の質問は次のとおりです。存在する場合は更新を実行し、存在しない場合は挿入し、1 つのクエリだけで他のすべてのエントリを削除することは可能ですか?

私の質問が理解できることを願っています。

4

2 に答える 2

0

最も簡単な方法は、すべてのインスタンスを削除してから、更新されたエントリの新しいスケジュールを作成することです。IMHOが必要ないプロセスの時期尚早な最適化を行おうとしているようです。既存のすべてのエントリを削除して置き換えることがパフォーマンスのボトルネックであることがわかった場合は、追加の挿入を最小限に抑えようとするアプローチの使用を検討することをお勧めしますが、これは実際には単純なオプションよりも多くの作業になると思いますすべてを取り外して交換する

于 2012-09-30T14:36:26.650 に答える
0

1 つのクエリでINSERTAND UPDATEANDを実行することはできません。DELETE

いくつかのオプションがあります:

  • MySqlで: 問題を処理するストアド プロシージャを記述し、ストアド プロシージャを呼び出してタスクを実行します。PHP からの 1 回の呼び出しでジョブが完了します。
  • PHPの場合: タスクを実行するコードを記述し、それをトランザクションにラップします。

仕事を成し遂げるための最良の方法は何かと尋ねたら、おそらく戦争を始めるでしょう. 私はお金を PHP ソリューションに投資しました。

于 2012-09-30T14:19:40.760 に答える