0

複数の優先度を持つ MySQL テーブルからデータを選択する PHP スクリプトを作成する必要がありますか?

すべての MySQL 行は、スポーツマンのスコアを評価のキーとする複数の「スポーツ分野」のアプリケーションです。

スポーツ列は、正確なスポーツに参加したい各参加者の優先順位を保持します。競技ごとに定員があります。

つまり、彼の最優先事項が満たされない場合 (たとえば、リストの 31 番目であるが、利用可能な場所が 30 しかない場合)、次の優先事項は彼の希望どおりでなければなりません。

例:

ID | 名前 | テニス | 水泳 | 水泳 バスケットボール | バスケットボール 走る | スコア|
-------------------------------------------------- ----------------------
1 |ジョン |0 |1 |2 |3 |80 |
-------------------------------------------------- ----------------------
1 |ビル |1 |2 |3 |4 |65 |
-------------------------------------------------- ----------------------
1 |アーノルド |0 |1 |0 |2 |70 |
-------------------------------------------------- ----------------------

すべての弟子には最大の参加者がいます。例:

$max_tenis = 5;

$max_swiming = 8;

$max_basketball = 10;

$max_runing = 9;

スポーツごとにすべてのアプリケーションを選択し、制限を満たしているかどうかを確認したい。

そのため、すべてのバスケットボールを選択する場合、最後の優先度が制限を満たさない場合は、最初の優先度 (または 2 番目、3 番目など) よりも優先度が高い他のすべてのアプリケーションを選択する必要があります。

4

1 に答える 1

1

あなたのリクエストを理解できるかどうかは 100% わかりませんが、スコアの高い人を優先したいのでしょう。

これにアプローチするには、SQLですべてを実行できるとは思えません。phpスクリプトを介してこれにアプローチします。また、このスクリプトはそれほど頻繁に実行されるわけではないため、極度に最適化する必要はないと考えています。

したがって、私の提案は、上のテーブルに割り当てられたというフィールドを追加することです。

次に、すべてのスポーツを配列として宣言し、最大値を割り当てます

$sport_slots = array("running" => 9, "basketball" => 10);

次に、テーブルでカウントを行い、そのカウントから while ループを実行して、すべての人と作業することを確認します。

次に、スコアが最も高い人を選択します。

select * from `people` where `score`=(select max(`score`) from people) AND assigned=0;

これらの結果を使用して...どのスポーツを選択するかを決定します.sport_slots 配列 (!= 0) にスロットがあることを確認してください。そうである場合は、スポーツ エントリから 1 を減算し、割り当てられるようにエントリを更新します = 1。

このコードの特定の部分についてサポートが必要な場合は、返信してください。

于 2013-07-03T14:01:32.673 に答える