如何更改每一行中的字段?

时间:2014-05-27 13:04:36

标签: php mysql

我的表设置如下:

id         :int
title      :varchar
info       :text
container  :int
status     :int

我有一些代码可以更改字段' status'从1到2和副(1在现场显示,2在隐藏)

我现在需要做的是: 当我将状态更改为1时,'容器中的每一行都具有相同的值。领域获得其地位'字段更改为2.网站应仅显示每个容器的一条记录

这是我的代码,以改变状态'到1。

(isset($_POST['show'])){
$chk = (array) $_POST['show'];
$p = implode(',',array_keys($chk)); 
$t = "SELECT * FROM example WHERE id IN ($p)";
$shown = $link->query($t);
if ($shown){
   $q = "UPDATE example SET status = 1 WHERE id IN ($p)";
   $show = $link->query($q);
}

任何人都可以帮我修改这段代码来做我需要的吗?

干杯

2 个答案:

答案 0 :(得分:1)

根据“id”标识的特定条目,其中包含“'容器”。参考。 当此条目的状态设置为1.具有相同容器的任何其他条目'引用将其状态设置为2。

这是非常未经测试的...猜测列名......

<?php
if (isset($_POST['show'])){
    $chk = (array) $_POST['show'];
    $p = implode(',',array_keys($chk));
    $t = "SELECT * FROM example WHERE id IN ($p)";
    $shown = $link->query($t);
    if ($shown){
        $currentContainer = $shown['container']; // all the records with this container
        $currentId = $p; // must not change this record later


        $q = "UPDATE example SET status = 1 WHERE id IN ($p)";
        $show = $link->query($q);

        $sql = "UPDATE example SET status = 2 WHERE container = '$currentContainer' AND id != $currentId";
        $others = $link->query($sql);
    }
}

答案 1 :(得分:1)

由于您的代码对我来说不是很清楚,我做了一些假设:

  1. $p是一个ID为id的数组,其状态必须更改为1
  2. 具有相同容器的数据库中所有其他行的状态必须更改为2
  3. $shown是一个带行数据的关联数组
  4. 您不知道容器值,必须从数据库中检索
  5. 以下代码的作用如下: SELECT查询获取每个id的容器。 然后,对于每个id,容器用于将所有关联的行更新为status = 2 然后第二个UPDATE查询为指定的id设置status = 1; 我还添加了一些转义来防止sql注入。

    (isset($_POST['show'])){
        $chk = (array) $_POST['show'];
        $p = array_keys($chk); 
        $t = sprintf("SELECT id, container FROM example WHERE id IN ('%s')", implode("','", mysql_real_escape_string($p)));
        $shown = $link->query($t);
    
       foreach($shown as $row) {
           $q = sprintf("UPDATE example SET status = 2 WHERE container = %s", mysql_real_escape_string($row['container']));
           $link->query($q);
           $q = sprintf("UPDATE example SET status = 1 WHERE id = %s", mysql_real_escape_string($row['id']));
           $link->query($q);    
       }