Php MySQL高级更新查询
我想设置一个图像作为相册的封面,我通过在do-while循环中的无线电输入来选择它。我在images表中放了一个名为is_cover的字段,如果图像设置为cover,则取1,否则取0Php MySQL高级更新查询,php,mysql,sql-update,Php,Mysql,Sql Update,我想设置一个图像作为相册的封面,我通过在do-while循环中的无线电输入来选择它。我在images表中放了一个名为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\""
<input type="radio" name="cover" value="<?php echo $row_images['image_id']; ?>" <?php if($row_images['is_cover'] == 1){ echo "checked=\"checked\""; } ?> />
您可以在此处运行两个查询,一个将它们全部设置为0,然后将您选择的查询设置为1您可以在此处运行两个查询,一个将它们全部设置为0,然后将您选择的查询设置为1这应该对您有帮助:
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)
这将为您带来好处:
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)
执行以下两个查询:
$query = "UPDATE images SET is_cover = 0 WHERE image_id <> {$is_cover}";
$query = "UPDATE images SET is_cover = 1 WHERE image_id = {$is_cover}";
$query=“更新图像集为\u cover=0,其中图像\u id{$is\u cover}”;
$query=“更新图像集为\u cover=1,其中图像\u id={$is\u cover}”;
第一个查询将所有都设置为零。第二个查询将所选图像的覆盖设置为1。执行这两个查询:
$query = "UPDATE images SET is_cover = 0 WHERE image_id <> {$is_cover}";
$query = "UPDATE images SET is_cover = 1 WHERE image_id = {$is_cover}";
$query=“更新图像集为\u cover=0,其中图像\u id{$is\u cover}”;
$query=“更新图像集为\u cover=1,其中图像\u id={$is\u cover}”;
第一个查询将所有都设置为零。第二个查询将所选图像的值设置为1。酷解决方案。我不知道怎么做。这两个查询的好处是什么?数据完整性?效率?@AndyGroff这是一个单一的查询,在本例中,与两个简单的查询相比,没有太大的好处,但是您可以用case语句做更多的事情。您好,我刚刚发现您的查询有一个小问题。更新会影响数据库中的所有行,这是一个问题,至少在我的情况下是这样。更新应仅影响属于特定相册的图像。因此,为了正确执行查询,更新应影响其相册id与其所属相册的相册id相匹配的所有图像。@Lykos22您可以在更新语句中添加其中someColumn=someVal和someOtherColumn=someOtherVal
。很酷的解决方案。我不知道怎么做。这两个查询的好处是什么?数据完整性?效率?@AndyGroff这是一个单一的查询,在本例中,与两个简单的查询相比,没有太大的好处,但是您可以用case语句做更多的事情。您好,我刚刚发现您的查询有一个小问题。更新会影响数据库中的所有行,这是一个问题,至少在我的情况下是这样。更新应仅影响属于特定相册的图像。因此,为了正确执行查询,更新应该会影响其相册id与其所属相册的相册id相匹配的所有图像。@lykos2您可以在更新语句中添加其中someColumn=someVal和someOtherColumn=someOtherVal
。