首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改每一行中的字段?

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

Stack Overflow用户
提问于 2014-05-27 13:04:35
回答 2查看 107关注 0票数 0

我有一张桌子布置得像:

代码语言:javascript
复制
id         :int
title      :varchar
info       :text
container  :int
status     :int

我有一些代码可以将字段“状态”的值从1更改为2和副(1在站点上显示,2被隐藏)。

现在我需要做的是:当我将状态更改为1时,在“容器”字段中具有相同值的每一行都会将其“状态”字段更改为2。

下面是我将“状态”更改为1的代码。

代码语言:javascript
复制
(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);
}

有人能帮我修改这段代码来满足我的需要吗?

干杯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-27 14:26:37

给定由“id”标识的特定条目,该条目包含“容器”引用。当此条目的状态设置为1时,任何具有相同“容器”引用的其他条目都将其状态设置为2。

这是未经检验的..。猜猜列的名字..。

代码语言:javascript
复制
<?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
EN

Stack Overflow用户

发布于 2014-05-27 14:43:25

因为我不太清楚您的代码,所以我做了一些假设:

  1. $p是一个id数组,必须将其状态更改为1
  2. 数据库中具有相同容器的所有其他行的状态必须更改为2。
  3. $shown是一个具有行数据的关联数组。
  4. 您不知道容器值,必须从数据库中检索它

下面的代码是这样做的: SELECT查询获取每个id的容器。然后,对于每个id,容器用于将所有相关行更新为status=2,然后第二个更新查询设置指定id的status=1;我还添加了一些转义以防止sql-注入。

代码语言:javascript
复制
(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);    
   }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23890279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档