2012-09-06 195 views
1

我想設置一個圖像作爲相冊的封面,我通過從do-while循環中的無線電輸入中選擇它來完成。我在圖像表中放置了一個名爲is_cover的字段,如果圖像設置爲封面,則該字段取1;否則取0。MySQL高級更新查詢

<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} 
"; 

回答

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) 
+0

謝謝!我已經測試過它,它似乎起作用! – Lykos

+0

很酷的解決方案。我不知道該怎麼做。這對兩個查詢有什麼好處?數據的完整性?效率? –

+1

@AndyGroff這是一個單一的查詢,在這種情況下,對兩個簡單的查詢來說不是一個巨大的好處,但是你可以用case語句做更多的事情。 – Fluffeh

0

你可以在這裏運行2個查詢一個將它們全部設置爲0,然後設置你選擇1

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}"; 

第一個查詢將所有is_cover爲零。第二個查詢爲所選圖像設置is_cover爲1。