#mysql #sql #row #clone #unique-key
#mysql #sql #строка #клонировать #уникальный ключ
Вопрос:
Я хотел бы клонировать все строки с YEAR = 2020 и присвоить полю GAMECODE значение, сгенерированное функцией php.
Однако на данный момент этот игровой код генерируется только один раз, поэтому я получаю ошибку «Дублирующая запись».
$number = generateGameCode();
$sql = "INSERT INTO games(gamecode, year, rounds)
SELECT '".$number."', year, rounds
FROM games
WHERE year = 2020";
Как мне назначить уникальный вновь сгенерированный код игры для каждой совпадающей строки?
Заранее спасибо!
Обновить
Я должен использовать свою функцию php для генерации значения. Я не могу просто установить GAMECODE на номер auto_increment в БД.
Комментарии:
1. Вы не можете вызвать функцию php из SQL-запроса. Вы можете либо читать и обновлять строки одну за другой в php (что неэффективно), либо перестроить свою функцию php как функцию SQL или хранимую процедуру.
Ответ №1:
Вы этого не делаете. Вы позволяете базе данных выполнять эту работу. Это требует реструктуризации таблицы. Но таблица должна выглядеть так:
create table games (
gamecode int auto_increment primary key,
year int,
rounds int
);
Затем вы не вставляете gamecode
(который я бы назвал gameid
, но вы можете называть его как хотите). Оно генерируется автоматически. Ваш запрос выглядит следующим образом:
insert into games (year, round)
select year, round
from games
where year = 2020;
Комментарии:
1. Я знаю об этой опции, однако я не могу использовать auto_increment. Я должен использовать свою функцию generateRandomNumber(), поскольку это делает немного больше.
2. Есть ли какой-либо обходной путь, если мне нужно использовать значение, сгенерированное php, пожалуйста?