1个查询可以更改表中2个条目的相同字段吗?

时间:2013-10-16 19:30:51

标签: 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_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>';
    }
}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

UDPATE yourtable
SET gallery = IF(id = $p, 3, 1)

对于id = $ p的记录,if会返回3。对于任何其他记录,它会返回1,并且这些1 / 3值会被分配到图库字段。

这有点低效,如果你在一个非常大的桌子上,除了一条记录之外它将重写所有记录基本上具有之前记录的相同值。在性能方面,您可能最好使用事务和两个查询:

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

理论上理论上只应改变两个记录:“旧”画廊-3,以及正在成为画廊-3的新画面。