2

如果字符串尚不存在,我正在尝试将字符串附加到字段:

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

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

4

2 回答 2

2

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

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

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

  1. 如果您的标签嵌入了其他标签(例如“cat”和“scat”),除非您编写非常复杂的基于逗号的搜索,否则您会找到错误的记录。
  2. 这些搜索永远不会被索引,因此随着记录数量的增长将变得非常缓慢。
  3. 您无法根据允许的标签列表验证使用的标签,无法保证数据库中只有允许的标签,或者轻松呈现现有或允许的标签列表。

正确的解决方案是在数据库中添加至少一个表,称为 gals_tags,包含 galid 和 tag 列。每个标签插入一条记录到该表中。如果 gal 有多个标签,则为每个标签添加一条记录。

于 2012-10-03T16:09:47.073 回答
0

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

如所写,您的选择正在寻找与 $instag 不完全匹配的字符串 - 我假设您还希望排除在字符串中某处包含 $instag 而不是完全匹配的字符串...。

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

但我也同意拉里的评论。

于 2012-10-03T16:19:07.727 回答