1

アルバムのカバーとして画像を設定したいのですが、do-while ループにあるラジオ入力から選択して行います。イメージ テーブルに is_cover という名前のフィールドを配置しました。このフィールドは、イメージが 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つのクエリを実行します。

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

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

最初のクエリはすべてis_coverゼロに設定します。2番目のクエリはis_cover、選択した画像に対して1に設定されます。

于 2012-09-06T10:59:55.480 に答える
0

ここで 2 つのクエリを実行して、すべてを 0 に設定し、選択したクエリを 1 に設定できます。

于 2012-09-06T10:53:10.867 に答える