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。

我想要一个 SQL 插入/更新查询,虽然我不确定如何去做。

到目前为止,我最好的尝试是通过 POST 读取 fish 和 numFish,然后有 4 个不同的 SQL 查询,每种颜色的鱼一个。

有没有更简单的方法来做我想做的事情?

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

使列成为变量。例如,从“鱼”发布的变量中选择要更新的列。但正如 podiluska 提到的,您可能应该规范化表结构。

于 2012-11-27T09:51:44.300 回答
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 回答