ホームページ >データベース >mysql チュートリアル >HTML タグを含む MySQL 列を正確に検索するにはどうすればよいですか?

HTML タグを含む MySQL 列を正確に検索するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-14 10:05:10166ブラウズ

How to Accurately Search MySQL Columns Containing HTML Tags?

レコードから HTML タグを削除する

次の内容が含まれる列内で特定のキーワードを検索する必要がある状況が発生した可能性があります。 HTMLタグ。ただし、これらのタグの存在により、クエリが間違った結果を返す場合があります。 MySQL クエリを変更して、HTML タグを除外しながらコンテンツに基づいてレコードを正確にフィルタリングする方法を見てみましょう。

提供された例では、クエリ SELECT * from table WHEREcolmn_name LIKE '%mytext%' は 4 つすべてを取得します。ただし、内容にキーワード「mytext」が含まれるのは行 3 のみです。この課題を克服するには、MySQL フォーラムのメンバーによって提案された次の解決策を検討してください。

SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS fnStripTags;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty varchar(4000) )
RETURNS varchar(4000)
DETERMINISTIC
BEGIN
  DECLARE iStart, iEnd, iLength int;
  WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO
    BEGIN
      SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));
      SET iLength = ( iEnd - iStart) + 1;
      IF iLength > 0 THEN
        BEGIN
          SET Dirty = Insert( Dirty, iStart, iLength, '');
        END;
      END IF;
    END;
  END WHILE;
  RETURN Dirty;
END;
|
DELIMITER ;
SELECT fnStripTags('this <html>is <b>a test</b>, nothing more</html>');

この解決策には、HTML タグを含むダーティ文字列を受け入れる fnStripTags という名前のユーザー定義関数 (UDF) を作成することが含まれます。この関数は文字列を反復処理して、開始タグ (<) と終了タグ (>) を見つけます。タグの長さを計算し、文字列からタグを削除して、HTML 要素のないクリーンな文字列を生成します。

この UDF を使用するには、次のように元のクエリに組み込むことができます。

SELECT * FROM table WHERE fnStripTags(column_name) LIKE '%mytext%';

この UDF を利用すると、クエリで HTML タグが検索から除外され、実際のコンテンツにキーワード「mytext」が出現する行のみが確実に取得されます。このアプローチにより、より正確なデータ フィルタリングを実行し、HTML マークアップによる干渉を回避できます。

以上がHTML タグを含む MySQL 列を正確に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。