我有一个用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查询,每个颜色为一个。
有没有更简单的方法来做我想做的事情?
答案 0 :(得分:2)
首先应该规范化数据库,使其具有(Colour, FishCount)
的表以及您拥有的任何其他字段。您可能还希望有一个颜色表加入此表,并用于填充可接受颜色列表。
通过这种方式,您可以编写更简单的查询,而无需在添加新的彩色鱼时重构数据库。例如:
Update FishColourCount
set FishCount = 3
where Colour = 'blue'
答案 1 :(得分: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)
答案 2 :(得分:0)
使列成为变量。 例如,从“Fish”发布变量中选择要更新的列。 但正如podiluska所提到的,你应该规范化表结构。
答案 3 :(得分: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}";