1

我想将图像设置为专辑的封面,我通过从 do-while 循环中的无线电输入中选择它来做到这一点。我在图像表中放入了一个名为 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}
";
4

3 回答 3

5

这应该为您解决问题:

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

根据我的测试:

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)
于 2012-09-06T10:58:40.190 回答
0

您可以在此处运行 2 个查询,将它们全部设置为 0,然后将您选择的查询设置为 1

于 2012-09-06T10:53:10.867 回答
0

执行这两个查询:

$query = "UPDATE images SET is_cover = 0 WHERE image_id <> {$is_cover}";

$query = "UPDATE images SET is_cover = 1 WHERE image_id = {$is_cover}";

第一个查询将 allis_cover设置为零。is_cover对于所选图像,第二个查询设置为 1。

于 2012-09-06T10:59:55.480 回答