0

我有一个表格,可以显示 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>';
    }
}

任何人都可以帮忙吗?

4

1 回答 1

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;

理论上应该只改变两条记录:“旧的”gallery-3,以及正在成为gallery-3的新记录。

于 2013-10-16T19:32:24.073 回答