-1

我有这个名为设备的 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 个语句中,因为我会将它包装在一个事务函数中,并且还会添加另一行 mysql 语句。所以我不会做 4x2(当前)我只会做 2(如果这可以在 1 个查询中完成)mysql 查询。

4

2 回答 2

1

你可以有这个声明,

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_id,:chara_id

于 2013-05-03T09:15:12.853 回答
0
$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";
}
于 2013-05-03T09:15:10.910 回答