首頁 >資料庫 >mysql教程 >如何準確搜尋MySQL包含HTML標籤的欄位?

如何準確搜尋MySQL包含HTML標籤的欄位?

DDD
DDD原創
2024-12-14 10:05:10166瀏覽

How to Accurately Search MySQL Columns Containing HTML Tags?

從記錄中刪除HTML 標籤

您可能遇到這樣的情況:您需要在包含以下內容的欄位中搜尋特定關鍵字HTML 標籤。但是,您可能會注意到,由於這些標籤的存在,您的查詢返回了不正確的結果。讓我們探索如何修改 MySQL 查詢以根據內容準確過濾記錄,同時排除 HTML 標籤。

在提供的範例中,查詢 SELECT * from table WHERE colmn_name LIKE '%mytext%' 將檢索所有四個行,即使只有第 3 行的內容包含關鍵字「mytext」。為了克服這項挑戰,請考慮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>');

此解決方案涉及建立一個名為fnStripTags 的使用者定義函數(UDF),該函數接受包含HTML 標記的髒字串。此函數遍歷字串,定位開始 () 標記。它計算標籤的長度並將其從字串中刪除,以產生沒有 HTML 元素的乾淨字串。

要使用此UDF,您可以將其合併到原始查詢中,如下所示:

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

透過使用此UDF,您的查詢將從搜尋中排除HTML 標記,確保您僅檢索實際內容中出現關鍵字“mytext”的行。這種方法可讓您執行更精確的資料過濾,並避免 HTML 標記的任何干擾。

以上是如何準確搜尋MySQL包含HTML標籤的欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn