2016-08-28 14 views
1

私はできる限りこの問題について説明しようとします。私のdbには "status"というフィールドがある "week"という行があります。
今後MYSQLはフィールドに特定の値が入る回数を制限します

完了

アクティブ

一つだけ「アクティブ」週間の行が存在することができます。ステータスは、以下の値を持つことができます。未来と完了は複数回発生することがあります。

Activeをユニークな個別の値にする方法がありますが、複数の行には出現できません。

ここで私が考えることができるのは、PHPを使ってすべての行を読み込んでループし、行がアクティブに設定されているかどうかを調べることです。別の週をアクティブとして選択する。

+0

あなたはそれを防ぐための純粋に技術的な方法をお探しですか?次に、別の列を追加する必要があります(たとえば、「アクティブ」、トリガーまたは数式または代替として計算される可能性があります)およびそのためのユニークなインデックスを追加する必要があります。 2つの行を「1」に設定するとエラーになります。しかし、これは、ユーザーがデータベース内の値を直接編集できる場合にのみ必要です。とにかくユーザーが値を編集するためにphpを使用している場合は、別の行をアクティブに設定する前に(またはその間に)何らかのチェックと更新を行うことができます。 – Solarflare

+0

アクティブなレコードのIDを、1つの行のみを含む他のテーブルに格納することができます。または、行の日付と現在の日付を比較してステータスを判断してください – Mike

+0

もう1つの列はSolarflareですが、行はActiveとCompleted、ActiveとFutureを同時に持つことはできません。 – mediaguru

答えて

0

すべての行でPHPでループする代わりに、アクティブな行があるかどうかを確認するだけで済みます。あなたが挿入する前にこれをしなければならない

SELECT id FROM table WHERE 'active' = 1

それとも

SELECT COUNT(1) FROM table WHERE 'active' = 1

あなたは運が悪くて、チェックと更新の間に有効な行を設定することができます。

値を1つだけ使用する場合は、アクティブな行のIDだけを格納する別のテーブルを作成できます。この表では、常に1つのレコードしかありません。

関連する問題