Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用基于常量值的“选择大小写”_Php_Mysql_Pdo - Fatal编程技术网

Php 使用基于常量值的“选择大小写”

Php 使用基于常量值的“选择大小写”,php,mysql,pdo,Php,Mysql,Pdo,我有一张名为“设备”的ff表格: +----------+----------+-----------+-------------+----------+---------+ | equip_id | chara_id | weapon_id | headgear_id | armor_id | ring_id | +----------+----------+-----------+-------------+----------+---------+ | 3 |

我有一张名为“设备”的ff表格:

+----------+----------+-----------+-------------+----------+---------+
| equip_id | chara_id | weapon_id | headgear_id | armor_id | ring_id |
+----------+----------+-----------+-------------+----------+---------+
|        3 |        1 |         3 |           5 |        9 |       8 |
|        5 |        3 |         3 |           5 |        3 |       8 |
|        6 |        4 |         7 |           5 |        3 |       8 |
|        7 |        5 |         4 |           5 |        3 |       8 |
|        8 |        6 |         3 |           5 |        2 |       8 |
|       10 |        8 |         3 |           5 |        2 |       8 |
+----------+----------+-----------+-------------+----------+---------+
我有一个很长的案例陈述:

switch ($equip->item_type) {
        case '1':
            # Weapon

            $sql_equip = "UPDATE equipment SET weapon_id = :item_id WHERE chara_id = :chara_id";  
            break;

        case '2':
            # Armor
            $sql_equip = "UPDATE equipment SET armor_id = :item_id WHERE chara_id = :chara_id";
            break;

        case '3':
            # Ring
            $sql_equip = "UPDATE equipment SET ring_id = :item_id WHERE chara_id = :chara_id";
            break;

        case '4':
            # Headgear
            $sql_equip = "UPDATE equipment SET headgear_id = :item_id WHERE chara_id = :chara_id";
            break;

        default:
            # do nothing...
            break;
    }
我在网上看到了一些查询,你可以在查询中使用case语句,我在网上搜索了一下,似乎找不到一个正确的查询


我希望它出现在1个语句中,因为我将把它包装在transact函数中,并且还将添加另一行mysql语句。因此,我将不做4x2(当前)查询,而只做2个(如果这可以在1个查询中完成)mysql查询

$fieldnames = array(1=>'weapon', 'armor', 'ring', 'headgear');
if (isset($fieldnames[$equip->item_type])) {
    $field = $fieldnames[$equip->item_type].'_id';
    $sql_equip = "UPDATE equipment SET $field = :item_id WHERE chara_id = :chara_id";
}
UPDATE  equipment 
SET     weapon_id = CASE WHEN :itemtype = 1 THEN :item_id ELSE weapon_id END,
        armor_id = CASE WHEN :itemtype = 2 THEN :item_id ELSE armor_id END,
        ring_id = CASE WHEN :itemtype = 3 THEN :item_id ELSE ring_id END,
        headgear_id = CASE WHEN :itemtype = 4 THEN :item_id ELSE headgear_id END
WHERE   chara_id = :chara_id

但是您需要传递三个值,
:itemtype
:item\u id
:chara\u id
,@PeterLang它已经标准化了。您应该考虑更改表模型。既然您已经使用了item_type和item_id,为什么不以这种样式创建表呢?您当前的模型强制您在添加新项目类型(鞋子、第二件武器、第二枚戒指)时更改表和代码…@YourCommonSense:Ok,更改了我的注释。@PeterLang按照您的逻辑,一个简单的用户表必须拆分为单独的表-用户名表、密码表、,电子邮件表等,以防万一,如果我们将需要添加一个宠物狗的名字在未来。通过当前的表格设置,只需一次简单的选择就可以获取完整的护甲集。但如果有人提议这样做,这将是一项艰巨的任务。您的设置适用于未确定的参数集。但是对于这样一套丁字甲胄来说,把它放在一张桌子上是完美的。我会看看这个“家,但现在我要回家了:”)