2015-09-24 3 views
0

Английский - это не мой родной язык, и мне сложно объяснить это заранее, чтобы извиниться за плохую грамматику и/или опечатки.Значение 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 KEY UPDATE DUPLICATE» 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 пользователь является actualy suscribing:

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», а обновление пользователя из формы 1 ничего не делает)

ответ

1

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

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.

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

+0

Thx много хорошего сэр, проверяя его прямо сейчас. – Yaren

Смежные вопросы