Как синхронизировать ячейки в таблице mysql

Рейтинг: 1Ответов: 1Опубликовано: 05.08.2025

Есть таблица: my_table которая выводится DESC

| id | depart | arrive | type  | status |
 - - - - - - - - - - - - - - - - - - - -
| 9  | 40     | 50     | bus   | active |
| 8  | 130    | 140    | car   | active |
| 7  | 120    | 130    | car   | active |
| 6  | 110    | 120    | car   | delete |
| 4  | 30     | 40     | bus   | active |
| 3  | 20     | 30     | bus   | delete |
| 2  | 10     | 20     | bus   | active |
| 1  | 100    | 110    | car   | active |

Форма для обновления данных arrive в таблице:

<form action='#' method='post'>
 <input type='hidden' name='id' value='<?$row["id"])?>'>
 <input type='text' name='arrive' value='<?$row["arrive"]?>'>
 <button type='submit' name='update'>Update</button>
</form>

И обработчик формы:

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['update'])) {
$id = $_POST['id'];                        
$arrive = $_POST['arrive'];

    $sql = "UPDATE my_table SET arrive = '$arrive' WHERE id = $id";

if ($conn->query($sql) === TRUE) {
                            echo "Запись успешно обновлена";
                        } else {
                            echo "Ошибка при обновлении записи: " . $conn->error;
                        }
                    }

Помогите усовершенствовать запрос $sql, чтобы при обновлении значения в arrive с id=1 автоматически обновлялось значение в depart со следующим id при условии что type=car, а status=active (в данном примере это будет depart с id=7) и соответственно, в ячейках после обновления выводилось одинаковое значение.

Ответы

▲ 1Принят
UPDATE table t1
LEFT JOIN table t2 ON t2.id = (SELECT MIN(id) FROM table t3 WHERE t3.id>t1.id AND t3.type = t1.type AND t3.status = 'active')
SET t1.arrive = '$arrive', t2.depart = '$arrive'
WHERE t1.id=$id