0

PHP で作成したフォームを使用して、MySQL データベースにアイテムの数量を記録します。

現在フォームで使用している選択リスト。

<select name="fish" id="fish">
    <option value="blueFish">Blue Fish</option>
    <option value="redFish">Red Fish</option>
    <option value="pinkFish">Pink Fish</option>
    <option value="greenFish">Green Fish</option>
</select>

<select name="numFish" id="numFish">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
   <option value="6">6</option>
</select>

フィールド numBlueFish、numRedFish、numPinkFish、および numGreenFish を持つデータベース テーブルがあります。

方法がわかりませんが、1 つの SQL 挿入/更新クエリが必要です。

これまでの私の最善の試みは、POST を使用して fish と numFish を読み込み、次に 4 つの異なる SQL クエリ (各色の魚に 1 つずつ) を使用することです。

私がやろうとしていることを行うためのより簡単な方法はありますか?

4

4 に答える 4

2

データベースを正規化して、テーブルと(Colour, FishCount)その他のフィールドを作成することから始める必要があります。また、このテーブルに結合する色のテーブルが必要な場合もあり、これを使用して許容可能な色のリストを作成します。

そうすれば、より単純なクエリを記述でき、新しい色の魚を追加するときにデータベースを再構築する必要がなくなります。例えば:

Update FishColourCount
set FishCount = 3
where Colour = 'blue'
于 2012-11-27T09:49:26.427 に答える
0

podiluskaに同意しますが、テーブルを正規化できない場合は、次のようなものを使用できます

switch ($_POST['fish']) {
    case 'blueFish' :
    case 'redFish' :
    case 'pinkFish' :
    case 'greenFish' :
        $field = 'num' . ucfirst($_POST['fish']);
        break;
}

$value = (int) $_POST['numFish'];
$query = "UPDATE table SET {$field} = {$value}";
于 2012-11-27T09:55:03.410 に答える
0

特に読みやすさのために、あなたのアイデアは最高だと思います...

ただし、次の方法で試すことができます。

"UPDATE table 
 SET numBlueFish = numBlueFish + " . ($_POST['fish'] == 'blueFish' ? $_POST['numFish'] : 0) . ", 
     numRedFish = numRedFish + " . ($_POST['fish'] == 'redFish' ? $_POST['numFish'] : 0) . ", 
     numPinkFish = numPinkFish + " . ($_POST['fish'] == 'pinkFish' ? $_POST['numFish'] : 0) . ", 
     numGreenFish = numGreenFish + " . ($_POST['fish'] == 'greenFish' ? $_POST['numFish'] : 0)
于 2012-11-27T09:47:16.700 に答える
0

列を変数にします。たとえば、「Fish」投稿変数から更新する列を選択します。しかし、podiluska が述べたように、おそらくテーブル構造を正規化する必要があります。

于 2012-11-27T09:51:44.300 に答える