MySQL клонирует соответствующие строки и изменяет одно поле уникальным значением, сгенерированным PHP

#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, пожалуйста?