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

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

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

< Сильный > EDIT : Сгенерированные столбцы не поддерживаются в 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);

< Сильный > ИЗМЕНИТЬ Поскольку использование сгенерированных столбцов не поддерживается на первичных ключах и 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 
)
0
ikiK 17 Фев 2020 в 00:59

2 ответа

Лучший ответ

Поскольку использование сгенерированных столбцов не поддерживается на первичных ключах и 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 
)
1
ikiK 16 Фев 2020 в 23:18

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

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

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 войдете в таблицу, и будьте уверены, что ваша база данных будет управлять им изнутри.

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

2
GMB 16 Фев 2020 в 22:07