Объединение данных входного столбца формы с только что созданными данными автоинкремента id на лету - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть таблица с делами, в которой на HTML форме POST я создаю номер автоинкремента INT case_id. В этой таблице я хотел бы, чтобы поданная nas_br ведьма была столбцом varchar, в котором я хотел бы объединить поле идентификатора из формы input + case_id, только что созданной при вставке.

Пример: когда я создаю новый случай, я передаю идентификатор, скажем, номер 3, case_id создается на вставке с номером 4. Мне нужно автоматически передать эту информацию в поле nas_br, чтобы оно было 34 (Я добавлю точку между ними, но это легко, я думаю).

Мой вопрос в том, возможно ли это сделать на лету, потому что case_id сделан на вставке, или мне нужен отдельный процесс. Как я могу сделать это автоматически при вводе формы?

РЕДАКТИРОВАНИЕ: Генерируемые столбцы не поддерживаются в MARIADB для первичного ключа / автоинкремента.

$sql = "INSERT INTO PREDMETIF (ID, NAZIV, PROTUSTRANKA, SUD, SUDBROJ, PREDMET, VPS, grad, post_br, adresa, jb, upr_tj, sudac, datum, status) VALUES ('$STRANKAFID','$STRANKAFNAZ','$PROTUSTRANKA', '$SUD', '$SUDBROJ', '$PREDMET', '$VPS', '$grad', '$post_br', '$adresa', '$jb', '$upr_tj', '$sudac', '$datum', '$status')";
            $query = mysqli_query($conn, $sql);

EDIT Поскольку использование сгенерированных столбцов не поддерживается для первичных ключей и AUTO_INCREMENT, найдено другое решение здесь: Какая альтернатива для сгенерированного столбца в MySQL 5.6 . Это создает новую таблицу в представлениях и копирует таблицу PREDMETIF с добавленным столбцом nas_br и выполняет добавление. Его нет в исходной таблице, но он доходит до работы.

CREATE VIEW PREDMETIFView AS (
    SELECT ID, case_id, COALESCE(CONCAT(ID, '.', case_id)) AS nas_br
    FROM PREDMETIF 
)

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

Вместо реализации некоторой (потенциально громоздкой) логики c для генерации производного значения, почему бы просто не использовать вычисляемый столбец?

Если столбец еще не существует:

alter table predmetif 
    add column nas_br varchar(10) 
    generated always as concat(id, '.', case_id) stored;

Или, если он уже существует:

alter table predmetif 
    modify column nas_br varchar(10) 
    generated always as concat(id, '.', case_id) stored;

Тогда вы можете просто оставить этот столбец отдельно, когда insert входя в таблицу, и будьте уверены, что ваша база данных будет управлять ею под капотом.

Примечание: разбрасывать параметры в строке запроса - это плохая практика (некоторые скажут: зло). Вам следует серьезно подумать об использовании параматеризованных запросов, чтобы сделать ваши запросы более эффективными и безопасными.

1 голос
/ 17 февраля 2020

Поскольку использование сгенерированных столбцов не поддерживается на первичных ключах и AUTO_INCREMENT, нашел другое решение здесь: Какая альтернатива для сгенерированных столбцов в MySQL 5.6 . Это создает новую таблицу в представлениях и копирует таблицу PREDMETIF с добавленным столбцом nas_br и выполняет добавление. Его нет в исходной таблице, но он доходит до работы.

CREATE VIEW PREDMETIFView AS (
    SELECT ID, case_id, COALESCE(CONCAT(ID, '.', case_id)) AS nas_br
    FROM PREDMETIF 
)
...