php - MySQL 高级更新查询

标签 php mysql sql-update

我想将一张图片设置为专辑的封面,我通过从处于 do-while 循环中的 radio 输入中选择它来实现。我在图像表中放入了一个名为 is_cover 的字段,如果图像设置为封面,则该字段为 1,否则为 0。

<input type="radio" name="cover" value="<?php echo $row_images['image_id']; ?>" <?php if($row_images['is_cover'] == 1){ echo "checked=\"checked\""; } ?> />

我的问题是如何执行将所有图像 is_cover 字段设置为 0 并且只有所选图像获得值 1 的更新查询。

我想说的是我怎样才能做到这一点:

$is_cover = $_POST['cover'];
$query = "
    UPDATE images 
    SET is_cover = 1 
    WHERE image_id = {$is_cover} 
          AND SET is_cover = 0 
    WHERE image_id <> {$is_cover}
";

最佳答案

这应该可以解决问题:

UPDATE images SET is_cover = CASE WHEN image_id = {$is_cover} THEN 1 ELSE 0 END;

来 self 的测试:

mysql> select * from first;
+------+-------+
| id   | title |
+------+-------+
|    1 | aaaa  |
|    2 | bbbb  |
|    3 | cccc  |
|    4 | NULL  |
|    6 | ffff  |
+------+-------+
5 rows in set (0.01 sec)

mysql> update first set title = case when id > 4 then 'gggg' else title end;
Query OK, 1 row affected (0.01 sec)
Rows matched: 5  Changed: 1  Warnings: 0

mysql> select * from first;
+------+-------+
| id   | title |
+------+-------+
|    1 | aaaa  |
|    2 | bbbb  |
|    3 | cccc  |
|    4 | NULL  |
|    6 | gggg  |
+------+-------+
5 rows in set (0.00 sec)

关于php - MySQL 高级更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12298415/

相关文章:

mysql - 如果表 B(colB1, colB2) 具有表 A 的匹配值,如何用 B2 的数据更新表 A 的列 A2 (colA1, colA2)?

c# - 在 C# 中执行 sql 更新命令后没有任何反应。我的错误在哪里?

用于向数据库添加数据的 PHP 脚本不起作用

php - 重新索引 MySQL INT 主键并重置 AUTO_INCREMENT

php - 在 YII 中动态添加语言

Mysql AVG忽略零

mysql - 多行更新

php - 大括号中的变量 - PHP 编码问题

php - 在主机 000webhost.com 上时出现 ' 字符的 mysql 错误

php - 在 Wordpress 中包含一个 github jquery 插件