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データベースにデータを格納するためのひどい方法であることに注意する必要があります。少なくとも3つの問題があります。

  1. 他のタグ(たとえば、「cat」や「scat」)を埋め込んだタグがある場合、非常に複雑なコンマベースの検索を記述しない限り、間違ったレコードが見つかります。
  2. これらの検索はインデックスに登録できないため、レコード数が増えると非常に遅くなります。
  3. 許可されたタグのリストに対して使用されたタグを検証したり、許可されたタグのみがデータベースにあることを保証したり、既存または許可されたタグのリストを簡単に提示したりすることはできません。

正しい解決策は、gals_tagsのような名前の、galid列とtag列を持つ少なくとも1つのテーブルをデータベースに追加することです。このテーブルにタグごとに1つのレコードを挿入します。ギャルに複数のタグがある場合は、タグごとに1つのレコードを追加します。

于 2012-10-03T16:09:47.073 に答える
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'");

しかし、私はラリーのコメントにも同意します。

于 2012-10-03T16:19:07.727 に答える