Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 1个查询能否更改表中2个条目的相同字段?_Php_Mysql - Fatal编程技术网

Php 1个查询能否更改表中2个条目的相同字段?

Php 1个查询能否更改表中2个条目的相同字段?,php,mysql,Php,Mysql,我有一个表单,显示mysql表中的一些图像和其他数据。使用单选按钮,选定图像的“厨房”字段将更改为3。我有这个工作正常,但在表中应该只有一个值3。如何更改下面的代码以将表中已有的任何3更改为1值 // if featured is checked, then set gallery field to 3 if(isset($_POST['featured'])){ $chk = (array) $_POST['featured']; $p = implode(',',array_

我有一个表单,显示mysql表中的一些图像和其他数据。使用单选按钮,选定图像的“厨房”字段将更改为3。我有这个工作正常,但在表中应该只有一个值3。如何更改下面的代码以将表中已有的任何3更改为1值

// if featured is checked, then set gallery field to 3
if(isset($_POST['featured'])){
    $chk = (array) $_POST['featured'];
    $p = implode(',',array_keys($chk)); 
    $t = mysqli_query($link, "SELECT * FROM gallery WHERE id IN ($p)");
    if ($t){
        $q = mysqli_query($link, "UPDATE gallery SET gallery=3 WHERE id IN ($p)");
        header('Location: galleryadmin.php'); exit();
    }
    else{
        echo '<script type="text/javascript"> alert("Dog Has Not Been Featured, Try Again 
                                                    Or Contact Site Developer") </script>';
    }
}
//如果选中了featured,则将gallery字段设置为3
如果(isset($_POST['featured'])){
$chk=(数组)$_POST['featured'];
$p=内爆(',',数组_键($chk));
$t=mysqli_query($link,“从id所在的库中选择*”);
如果有的话($t){
$q=mysqli_查询($link,“更新库集库=3,其中id在($p)”);
标题('Location:galleryadmin.php');退出();
}
否则{
“echo”警报(“未显示狗的特征,请重试
或联系现场开发商”);
}
}
有人能帮忙吗

UDPATE yourtable
SET gallery = IF(id = $p, 3, 1)
对于id=$p的记录,
if
返回
3
。对于任何其他记录,它将返回
1
,而那些
1
/
3
值将分配给gallery字段

这有点低效,如果你在一个非常大的表上,除了一条记录外,它会重写所有的记录,使其基本上具有与以前相同的值。就性能而言,最好使用一个事务和两个查询:

start transaction;
update yourtable set gallery=1 where gallery=3;
update yourtable set gallery=3 where id=$p;
commit;
理论上,这只会改变两项记录:“旧”gallery-3和即将成为gallery-3的新记录

对于id=$p的记录,
if
返回
3
。对于任何其他记录,它将返回
1
,而那些
1
/
3
值将分配给gallery字段

这有点低效,如果你在一个非常大的表上,除了一条记录外,它会重写所有的记录,使其基本上具有与以前相同的值。就性能而言,最好使用一个事务和两个查询:

start transaction;
update yourtable set gallery=1 where gallery=3;
update yourtable set gallery=3 where id=$p;
commit;
理论上,这只会改变两项记录:“旧”gallery-3和即将成为gallery-3的新记录

对于id=$p的记录,
if
返回
3
。对于任何其他记录,它将返回
1
,而那些
1
/
3
值将分配给gallery字段

这有点低效,如果你在一个非常大的表上,除了一条记录外,它会重写所有的记录,使其基本上具有与以前相同的值。就性能而言,最好使用一个事务和两个查询:

start transaction;
update yourtable set gallery=1 where gallery=3;
update yourtable set gallery=3 where id=$p;
commit;
理论上,这只会改变两项记录:“旧”gallery-3和即将成为gallery-3的新记录

对于id=$p的记录,
if
返回
3
。对于任何其他记录,它将返回
1
,而那些
1
/
3
值将分配给gallery字段

这有点低效,如果你在一个非常大的表上,除了一条记录外,它会重写所有的记录,使其基本上具有与以前相同的值。就性能而言,最好使用一个事务和两个查询:

start transaction;
update yourtable set gallery=1 where gallery=3;
update yourtable set gallery=3 where id=$p;
commit;

理论上,这只会改变两条记录:“旧”gallery-3和即将成为gallery-3的新记录。

谢谢@Marc B,我使用了第二个示例,因为一些记录在gallery字段中的值为2。这真是一种享受!谢谢@Marc B,我使用了第二个示例,因为一些记录在gallery字段中的值为2。这真是一种享受!谢谢@Marc B,我使用了第二个示例,因为一些记录在gallery字段中的值为2。这真是一种享受!谢谢@Marc B,我使用了第二个示例,因为一些记录在gallery字段中的值为2。这真是一种享受!