更新立即插入的行而不更新旧的

时间:2017-08-20 15:34:30

标签: php mysql sql

如果我插入行,并且我想更新插入此立即进程的行的一个列值,而不更新此前一个进程中插入的旧行的一个列值 你可以看到我的代码并更清楚地理解:

<?php
 session_start(); ?>

<form action="" method="post" name="data_table">
<tbody >
<?php

require_once("dbconfig.php");
error_reporting(0);
$id=$_POST['id'];
$class=$_POST['class'];
$d = new DateTime('now', new DateTimeZone('Asia/Baghdad'));
$date=$d->format('Y-m-d H:i:s');
$q="select * from students WHERE class='$class'";
$qq=mysql_query($q)
  or die(mysql_error());

echo "<table border='2'>
<tr>
<th>الأسم</th>
<th>الحضور</th>
</tr><tr>";
while($row=mysql_fetch_array($qq)){
?>
<input type="hidden" name="class" value="<?php echo $row['class']; ?>" >
<td><input type="checkbox" value="<?php echo $row['id']; ?>" name="id[]" ></td>
<td><b><?php echo $row['username']; ?></td>
<tr>

<?php } ?>
</table>
<?php if (isset($_POST['submit']))
{if(empty($id) || $id==0)
{ echo " please check ";
}
else
{
$impid=implode(", ",$id);
$qdel=mysql_query("INSERT INTO attendees SELECT * FROM `students` WHERE class='$class'");
$qdel=mysql_query("UPDATE attendees set datetime='$date'");

if (isset($qdel)){
echo "<h2> done </h2>";}
}
} ?>
</tbody>
</form>

问题是更新查询更新了现在和之前插入的所有行中的datetime列的值所以我的问题是如何使更新查询与每个插入过程分开工作 有人可以帮忙吗?感谢

1 个答案:

答案 0 :(得分:0)

插入后立即执行更新效率低下。依靠两个不同表的列来始终匹配也不是一个好主意。

您可以在查询中插入静态字符串。

INSERT INTO attendees (column1, column2, column3, datetime) 
SELECT column1, column2, column3, '$date' FROM students WHERE class='$class'

然而,这打破了RDBMS的标准化标准。执行此操作的最佳方法不是重复数据到与会者,而是在与会者中引用学生ID的外键。您不必更新两个表来更新学生的信息。我建议你在设计数据库之前先阅读数据库规范化。