我想将一张图片设置为专辑的封面,我通过从处于 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/