我的表设置如下:
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);
}
任何人都可以帮我修改这段代码来做我需要的吗?
干杯
答案 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)
由于您的代码对我来说不是很清楚,我做了一些假设:
$p
是一个ID为id的数组,其状态必须更改为1 $shown
是一个带行数据的关联数组以下代码的作用如下: 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);
}