Php 使用基于常量值的“选择大小写”
我有一张名为“设备”的ff表格:Php 使用基于常量值的“选择大小写”,php,mysql,pdo,Php,Mysql,Pdo,我有一张名为“设备”的ff表格: +----------+----------+-----------+-------------+----------+---------+ | equip_id | chara_id | weapon_id | headgear_id | armor_id | ring_id | +----------+----------+-----------+-------------+----------+---------+ | 3 |
+----------+----------+-----------+-------------+----------+---------+
| 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按照您的逻辑,一个简单的用户表必须拆分为单独的表-用户名表、密码表、,电子邮件表等,以防万一,如果我们将需要添加一个宠物狗的名字在未来。通过当前的表格设置,只需一次简单的选择就可以获取完整的护甲集。但如果有人提议这样做,这将是一项艰巨的任务。您的设置适用于未确定的参数集。但是对于这样一套丁字甲胄来说,把它放在一张桌子上是完美的。我会看看这个“家,但现在我要回家了:”)