ON DUPLICATE значение CONCAT VALUE со строкой

Английский не является моим родным языком, и мне трудно объяснить это заранее, извиняюсь за плохую грамматику и / или опечатки.

У меня есть таблица MySQL, как это показывает

+-----------------------+---------+---------------+---------------+------+
|        sus_key        | sus_nom |   sus_mail    |    sus_id     | etc..+
+-----------------------+---------+---------------+---------------+------+
|   int auto_increment  | String  | String UNIQUE |    String     | etc..+
+-----------------------+---------+---------------+---------------+------+

Я использую эту таблицу, чтобы сохранить подписчиков для новостных рассылок, и использую «sus_id», чтобы определить, на какую форму подписан пользователь, например:

user1 subscribe from form of page1 the "sus_id" will be "form1"user2 subsribe from form of page2 the "sus_id" will be "form2"

Пользователи могут свободно изменять свое имя и другие данные, если они вставляют одно и то же электронное письмо в любую форму, используя «ON DUPLICATE KEY UPDATE» mysql_querry из php:

$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "INSERT INTO correos (sus_nom, sus_mail, sus_id, sus_tel)    VALUES ('".$name ."', '".$email ."', 'form#', '".$tel ."') ON DUPLICATE KEY UPDATE sus_nom = ('".$name."'), sus_tel = ('".$tel."'), sus_id = ('form#');";
$conn->query($sql);

я хочу, чтобы существующий пользователь обновлялся из другой формы, используя CONCAT, чтобы смешать значение существующего id_fom, где пользователь подписался с id_form, которую пользователь фактически подозревает:

user1 suscribe in form 1 -> sus_id = "form1"user1 update in form 2 -> sus_id = "form1form2"

и извините, если это окажется 2 вопроса, но:
Как я могу использовать CONCAT для записи «ON DUPLICATE KEY UPDATE»?
Учитывая, что пользователь может подписаться на одну и ту же форму дважды, как проверить, имеет ли значение sus_id текущую строку form_id, чтобы значения не повторялись? (если sus_id имеет «form1form2» и обновление пользователя из form1 ничего не делает)

0

Решение

Обычно плохая идея помещать несколько значений в один столбец, это делает поиск значений дорогостоящим, поскольку они не могут быть проиндексированы, и, как видно из этого вопроса, это затрудняет обновление столбца. Но если вам нужно сделать это:

ON DUPLICATE KEY UPDATE
sus_nom = VALUES(sus_num),
sus_tel = VALUES(sus_tel),
sus_id = IF(LOCATE(sus_id, VALUES(sus_id)), sus_id, CONCAT(sus_id, VALUES(sus_id)))

LOCATE проверяет, является ли новое значение sus_id уже в sus_id колонка. Если это так, он устанавливает sus_id вернуться к себе, в противном случае он объединяет новый sus_id,

Кстати, обратите внимание, что вы можете использовать VALUES(colname) в ON DUPLICATE KEY UPDATE предложение, чтобы ссылаться на значения, которые были бы вставлены в этот столбец, а не конкатенировать строку снова.

1

Другие решения

Других решений пока нет …