【问题标题】:Best way to REPLACE with MySQL for usernames用 MySQL 替换用户名的最佳方法
【发布时间】:2023-04-04 12:46:01
【问题描述】:

我正在用 PHP 开发一个网站,它现在设置了自己的状态和墙系统(分别类似于 twitter 和 facebook)。我正在尝试这样做,以便用户稍后可以更改其用户名,并且任何提及该用户的状态或墙帖(如“@woo hi!”)都将替换为新用户名。

我尝试在 MySQL 中使用 REPLACE 查询,但显然我不能将 'username' 替换为 'newusername',因为如果用户名为 @w 的人将其用户名更改为 @f,那么其他人的帐户使用用户名@woo 将变为@foo。明白我的意思了吗?

我认为我的选择基本上是创建自己的格式来保存状态/墙帖,用 |woo| 替换用户名@woo (或任何表示用户名结尾的东西),但我很好奇其他人是否对此事有不同的想法,或者是否有人知道让 REPLACE 查询为我做这件事(就像一种让它整体扫描的方法话,这样@w != @woo。我很想听听你的想法。

编辑:

我想出了我要做什么,并正在更新此内容以供其他人将来参考。我决定用 #@usernames# 替换 statuses/wall 帖子中的所有 @usernames 并将它们保存在数据库中。所以现在我可以使用 MySQL 的简单 REPLACE 查询来替换状态/墙帖子中提到的所有用户名,并且不会有歧义问题(@w 在我的数据库中变成 #@w#,这意味着更改用户名 @ w (#@w#) 到 @f (#@f#) 不会将 #@woo# 更改为 #@foo#。当然,现在在帖子中显示用户名时,我必须通过“unformat”运行内容函数在开始和结束时去掉#,但这还不错。

【问题讨论】:

  • 只有twitter和facebook,不要浪费时间:)
  • 如果MZ因为MySpace而放弃了怎么办? :p
  • yes123,我更喜欢能提高我对手头问题的了解的答案。而至于只有twitter和facebook,以前也有“只有myspace”。

标签: php mysql replace


【解决方案1】:

您可以设计您的数据库来存储有关每个状态/帖子的附加数据,例如帖子中提到的用户的所有用户 ID 的列表。然后,很容易执行有针对性的搜索并替换为:

  • 找到所有提及用户更改姓名的帖子通过加入他们的 ID
  • 仅在这些帖子中将 $oldname 替换为 $newname

您可能仍然有少量的歧义(在一篇文章中多次提及),但您应该能够编写一个正则表达式来标识$oldname而不是@987654324 的子字符串 @。

【讨论】:

  • 谢谢你的回复,我也喜欢这个主意。我肯定会考虑这个想法。
猜你喜欢
  • 2017-08-23
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2011-10-16
  • 2012-07-30
  • 1970-01-01
  • 2021-07-17
相关资源
最近更新 更多