#php #mysql #sql #mysqli
#php #mysql #sql #mysqli
Вопрос:
Я хотел бы добавить звездочку (*) после имени пользователя, если часть информации о профиле устарела.
Дональд
$stmt = $conn->prepare("UPDATE contacts SET name = concat(name, '*') WHERE phone = ?");
$stmt->bind_param("s",$phone);
$stmt->execute();
Дональд*
В первый раз это работает нормально, но если ничего не изменилось, и я обновляю профиль, он добавляет еще одну звездочку, так что тогда имя Дональд **. В следующий раз это будет Дональд *** и т.д.
Каким было бы решение проверить, есть ли в имени уже звездочка, и если да, то ничего не делать?
Комментарии:
1. Если определение того, что что-то устарело, не является довольно дорогостоящим, похоже, что это было бы лучше обрабатывать так же, как форматирование на стороне клиента на основе устаревшего статуса. Если в этом сценарии вы думаете «кто-то пытался дозвониться по номеру, и он был отключен», как это * будет указывать на то, что номер телефона является устаревшей частью, а не чем-то другим, например, почтовым адресом, с которого было возвращено письмо или посылка?
Ответ №1:
Вы можете использовать right()
для проверки, является ли последний символ a *
, и обновлять строки только там, где это не так.
UPDATE contacts
SET name = concat(name, '*')
WHERE phone = ?
AND right(name, 1) <> '*';
Комментарии:
1. Я даже не сталкивался с этой функцией раньше, но, похоже, мне стоит взглянуть. Кажется, он выполняет работу так, как я хотел. Большое спасибо!
Ответ №2:
Один из способов — использовать условный тест в выражении, которое выводит новое значение. например
UPDATE contacts
SET name = CONCAT(name, CASE
WHEN name LIKE '%*' THEN ''
ELSE '*'
END
)
WHERE phone = ?