Можно ли при вставке строки с уникальным полем изменить значение, которое входит в уникальное поле, на что-то другое в случае дублирования?
Ситуация: пользователь добавляет новую статью, название которой не может повторяться. По какой-то причине пользователь вводит имя, которое уже существует в базе данных.
Если используется «ON DUPLICATE KEY UPDATE» — предыдущая запись (с тем же именем, что и вставленное) получает все новые данные в других полях (происходит обновление) — не хорошо.
Что требуется при вставке, если поле уникально и в БД есть совпадение, измените вставляемое значение на что-то вроде «[DUPLICATE] name».
Это покажет наличие дубликата, и пользователь просто изменит имя (которое, скорее всего, было вставлено как дубликат по ошибке).
Вы должны сделать что-то вроде (используя подготовленные операторы с MySQL) —
SELECT name FROM table WHERE name=?
Привязать переменную (я предполагаю, $articleName
) и сохраните результат, а затем проверьте соответствие mysqli_num_rows()
,
Если существует одна или несколько строк, переименуйте название статьи.
$articleName=$articleName."[DUPLICATE]";
Затем вставьте в БД.
Примечание: обычно не будет одинаковых названий статей, потому что предложение может быть составлено разными способами. Подумайте о создании очень умной программы для обнаружения этого или ручной проверки, как в SO.
Других решений пока нет …