Mysql update if (some statement)

标签 mysql count

我只想在表不包含指定值时创建一个 mysql 更新(如果玩家有空槽)

我的想法:

update player_items 
set slot=20 
where id=0 
and uid=2 
and (SELECT COUNT(*) 
     FROM player_items 
     WHERE slot=12 and uid=2) = 0;

code in sqlfiddle

我希望这只是一个 mysql 问题

最佳答案

一种方法是使用反连接模式,例如

UPDATE player_items p
  LEFT
  JOIN ( SELECT uid
           FROM player_items
          WHERE slot = 12
            AND uid = 2
          LIMIT 1
       ) q
    ON q.uid = p.uid
   SET p.slot = 20
 WHERE p.id = 0
   AND p.uid = 2
   AND q.uid IS NULL

LEFT JOIN 查找匹配的行,但如果没有找到匹配的行,则 MySQL 将生成一个全为 NULL 值的行。我们可以使用 q.uid IS NULL 谓词过滤掉任何匹配的行,因此我们只会得到没有匹配的行。

mysql> UPDATE player_items p
    ->   LEFT
    ->   JOIN ( SELECT uid
    ->            FROM player_items
    ->           WHERE slot = 12
    ->             AND uid = 2
    ->           LIMIT 1
    ->        ) q
    ->     ON q.uid = p.uid
    ->    SET p.slot = 20
    ->  WHERE p.id = 0
    ->    AND p.uid = 2
    ->    AND q.uid IS NULL
    -> ;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

关于Mysql update if (some statement),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17601521/

相关文章:

mysql - 将地理空间点转换为纬度/经度字段

php - 如果值为空/空,则不显示列/行

php - 从 MySQL 回显数据

mysql - SQL:获取每个分组中的最新条目以及每个组中有多少条目

sql - 语法有问题吗?

mysql - COUNT ifnull mysql 查询

php - MySQL查询顺序按“最完整的字段”

php - 用一个字符串获取多条记录

php - php中用户 undefined index 和变量

php - 计数的计数- PHP MYSQL