“更新不喜欢?”

时间:2012-10-03 16:07:06

标签: php sql where

我试图将字符串附加到字段(如果它们不存在于:

mysql_query("UPDATE gals4 SET tags = CONCAT(tags, '$instag') WHERE id = '$instagnum' AND tags NOT LIKE '$instag'");

这只是附加到'标签',无论它是否存在于现场。我在这做错了什么?

2 个答案:

答案 0 :(得分:2)

要回答您的直接问题,您必须将字符%放在匹配字符串的开头和结尾处:

 "AND tags NOT LIKE '%$instag%'"

但是,您应该知道这是一种将数据存储在SQL数据库中的可怕的方式。至少有三个问题:

  1. 如果您有嵌入其他标签的标签(例如“cat”和“scat”),除非您编写非常复杂的基于逗号的搜索,否则您将找到错误的记录。
  2. 这些搜索永远不会被编入索引,因此随着记录数量的增长而变得非常慢。
  3. 您无法验证针对允许的标记列表使用的标记,保证只允许标记位于数据库中,或者轻松显示现有或允许标记的列表。
  4. 正确的解决方案是在数据库中添加至少一个表,称为gals_tags,列galid和tag。将每个标记的一条记录插入此表中。如果gal有多个标记,请为每个标记添加一条记录。

答案 1 :(得分:0)

你需要另一个变量$ instagwildcard,它可以是$ instag,但是在$ instag之后有一个%(可能在之前)

如上所述,你的select正在寻找一个与$ instag不完全匹配的字符串 - 我假设你也希望在字符串中的某个地方排除包含$ instag的字符串而不是完全匹配....

$instagwildcard = "%" . $instag . "%";
mysql_query("UPDATE gals4 SET tags = CONCAT(tags, '$instag') WHERE id = '$instagnum' AND tags NOT LIKE '$instagwildcard'");

但我同意拉里的评论。