【问题标题】:mysql search string in table ignoring links忽略链接的表中的mysql搜索字符串
【发布时间】:2014-08-12 09:16:15
【问题描述】:

我正在尝试在我的数据库中搜索与字符串匹配的 wordpress 帖子。

但是,我希望将其中包含匹配单词的行作为纯文本获取,但不是将单词嵌入链接中的行。

例如,如果一个帖子在数据库的'wp_posts'表中有以下文本:

'This is a Test page: <a href="http://localhost/test-page">About Test</a>'.

然后我在我的自定义查询中搜索“关于”这个词:

SELECT * FROM `wp_posts` WHERE post_content like '%about%';

所以我得到了上面的帖子作为结果。 有没有办法我可以忽略在链接中嵌入了搜索字符串的帖子,并获取其他将搜索字符串作为普通字符串一部分的帖子?

我尝试了一个 REGEX 查询,但没有成功:

SELECT * FROM `wp_posts` WHERE post_content REGEXP '[[:<:]]about[[:>:]]';

【问题讨论】:

  • about 是否区分大小写? about vs About ... SELECT * FROM wp_posts WHERE lower(post_content) like '%about%';
  • 这里不区分大小写。结果可以包括任何内容。
  • post_content 是什么数据类型?
  • post_content 的数据类型为“longtext”
  • mysql版本为:5.1.36

标签: mysql sql database wordpress


【解决方案1】:

可能是这样的:

SELECT * FROM `wp_posts` WHERE post_content LIKE '%about%' AND post_content NOT REGEXP '>[^>]*about[^<]*<';

【讨论】:

  • 是的,我忘记了另一个 %。
【解决方案2】:

试试这个

SELECT * FROM `wp_posts` WHERE post_content REGEXP '^[^<>]+about';

这里是Fiddle

【讨论】:

  • 我还想从:'This is about Test page: localhost/test-page">about Test here'中过滤出'about'。所以Yejing的解决方案适用于这种情况. 可能您必须在查询中的“REGEXP”之前包含“NOT”
  • 好的,不管有人如何帮助。
【解决方案3】:

在 sqlfiddle 中它工作正常!

http://sqlfiddle.com/#!2/f1697/2

创建脚本

CREATE TABLE supportContacts 
(
    test longtext
);

INSERT INTO supportContacts(test) VALUES ('This is a Test page: <a href="http://localhost/test-page">About Test</a>')

选择

select * from supportContacts where test like '%about%'

【讨论】:

  • 实际上我已经尝试了给定的查询,但我不想要包含搜索字符串作为链接一部分的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
相关资源
最近更新 更多