PHP SQL更新时,从其他具有相同名称的行中删除先前的列数据

时间:2019-02-26 11:44:15

标签: php sql

我有一个看起来像这样的表:

------------------------------------------------
id | job_no | comment | status | current_status
------------------------------------------------
1  |  9201  |  ...    | active | active
------------------------------------------------
2  |  9201  |  ...    | hold   | hold
------------------------------------------------
3  |  9201  |  ...    | cancel | cancel
------------------------------------------------

在此示例中,当我输入编号为9201的作业的注释并更改状态以取消时,例如,我需要将列状态更新为“取消”,并且将current_status更新为“取消”,但所有先前的行作业9201 current_status更新为空白(''),状态保持原样。像这样:

------------------------------------------------
id | job_no | comment | status | current_status
------------------------------------------------
1  |  9201  |  ...    | active |
------------------------------------------------
2  |  9201  |  ...    | hold   |
------------------------------------------------
3  |  9201  |  ...    | cancel | cancel
------------------------------------------------

因此,每次更新时,该ID的状态都会更新,但是current_status仅用于更新该job_no和该job_no current_status为空的其他行的最后一个ID。

现在已经挣扎了好几天...请帮助。

所有操作均在一页上完成,最后刷新页面。有人输入评论,该评论显示在页面底部,而current_status则在页面顶部更改:

$insert = "INSERT INTO history (user,comment,job_no,status)
VALUES ('$user','$comment','$job_no','$status')";
$query = mysqli_query($connection, $insert) or die 
(mysqli_error($connection)); 

$sel_query="Select * from history ORDER BY comment_date DESC LIMIT 1";
$result = mysqli_query($connection,$sel_query);
while($row = mysqli_fetch_assoc($result)) { 
$status = $row['status'];
$job_no = $row['job_no'];
}

$update1="update history set current_status='$status' where 
job_no='$job_no'";
mysqli_query($connection, $update1) or die(mysqli_error());   


echo '<meta http-equiv="refresh" content="0">';

2 个答案:

答案 0 :(得分:1)

尝试一下:

首先,使用提供的current_status = ''的{​​{1}}更新所有行

job_no

,然后使用UPDATE history SET current_status = '' WHERE job_no = "$job_no" 更新最后一个:

current_status = 'cancel'

答案 1 :(得分:0)

我假设您可以从要更改状态的行中获取id和job_no。

因此您可以通过id来简单地更新它:

UPDATE HISTORY
SET status = 'cancel', current_status = 'cancel' 
WHERE id = 3;

然后使用此ID + job_no更新所有其他人

UPDATE HISTORY
SET current_status = '' 
WHERE job_no = 9201 AND id != 3;

working db-fiddle example here