mysql - 搜索 MySQL 时忽略保存数据中的 HTML 标签

标签 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

最佳答案

有一个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 ....)"

关于mysql - 搜索 MySQL 时忽略保存数据中的 HTML 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27198647/

相关文章:

php - 除零错误(PHP设置cookie问题)

python - 如何在 kubernetes 集群内使用脚本语言连接数据库

python - execute(sql) 后调用fetchall() 是不是第二次读取数据?

mysql - 选择对 table_link 的计数作为多对多关系的桥梁

php - 编译支持 MySQL 5 的 PHP4.4

sql - 获取由最小值和最大值标识的组中的连续值

带前导零的 MYSQL 查询返回的结果与不带前导零的结果相同

mysql - 将查询结果传递给子查询

sql-server - IsUnique=Yes 的 Unique Key 和 Index 有什么区别?

数据库 "Identity"字段和自增