一个统一的SQL查询来处理不同的选择选项值

时间:2012-11-27 09:40:52

标签: php mysql sql

我有一个用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 个答案:

答案 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}";