我有一张桌子布置得像:
id :int
title :varchar
info :text
container :int
status :int我有一些代码可以将字段“状态”的值从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);
}有人能帮我修改这段代码来满足我的需要吗?
干杯
发布于 2014-05-27 14:26:37
给定由“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);
}
}发布于 2014-05-27 14:43:25
因为我不太清楚您的代码,所以我做了一些假设:
$p是一个id数组,必须将其状态更改为1$shown是一个具有行数据的关联数组。下面的代码是这样做的: SELECT查询获取每个id的容器。然后,对于每个id,容器用于将所有相关行更新为status=2,然后第二个更新查询设置指定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);
}https://stackoverflow.com/questions/23890279
复制相似问题