在搜索MySQL时忽略已保存数据中的HTML标记

时间:2014-11-29 03:48:11

标签: mysql sql database

我为此搜索过多,我发现了几个结果,但没有结果。 我正在使用MySQL查询来搜索我的帖子表中的标题和内容。我的问题是使用包含HTML标签的TinyMCE保存数据。我希望我的搜索查询忽略HTML标记,以便不返回任何不相关的结果 我的疑问:

SELECT posts.id, posts.title, posts.date, posts.tags, posts.image, users.name, users.screen_name, users.id as user_id,
    IF(
        posts.title LIKE '$searchTerm%',  20, 
        IF(posts.title LIKE '%$searchTerm%', 10, 0)
    )
    + IF(posts.post LIKE '%$searchTerm%', 5,  0)
    AS weight
FROM posts
LEFT JOIN users ON posts.user_id=users.id
WHERE (
    posts.title LIKE '%$searchTerm%' 
    OR posts.post LIKE '%$searchTerm%'
)
ORDER BY weight DESC
LIMIT 100

1 个答案:

答案 0 :(得分:0)

有一个php函数可以做到这一点

strip_tags($text);

您可以在http://php.net/manual/en/function.strip-tags.php

找到更多信息

如果您仍想在mysql中执行此操作,则必须定义自己的函数

delimiter ||
DROP FUNCTION IF EXISTS strip_tags||
CREATE FUNCTION strip_tags( x longtext) RETURNS longtext
LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA
BEGIN
DECLARE sstart INT UNSIGNED;
DECLARE ends INT UNSIGNED;
SET sstart = LOCATE('<', x, 1);
REPEAT
SET ends = LOCATE('>', x, sstart);
SET x = CONCAT(SUBSTRING( x, 1 ,sstart -1) ,SUBSTRING(x, ends +1 )) ;
SET sstart = LOCATE('<', x, 1);
UNTIL sstart < 1 END REPEAT;
return x;
END;
||
delimiter ;

定义函数

后,在搜索查询中调用该函数
$q="CALL strip_tags(SELECT textarea FROM table where ....)"