MySQL:在注释字符串中搜索关键字

时间:2016-07-28 16:17:22

标签: mysql sql phpmyadmin

我已经在stackoverflow上查看了几个类似的主题,这与我的问题类似,但我找不到任何可以帮助我的东西。我有这个SQL查询:

SELECT * FROM twitter_result 
WHERE LOWER(TweetComment) LIKE LOWER('%lebron james%') 
AND LOWER(TweetComment) LIKE LOWER('%NBA%')

我想搜索一个TweetComment,其中包含" LeBron James" " NBA"在同一时间。但这两个词需要独立存在。就像它不应该返回包含#LeBron James和#NBA(或NBATalk)

的推文

例如,它应该返回这样的推文

LeBron James Donates $41 Million To Send 1,100 Kids To College, Becomes 6th Most Charitable Athlete NBA In World

Lebron James和NBA独立(没有#个角色)。我有LOWER忽略区分大小写。任何帮助是极大的赞赏。感谢

抱歉,我忘了添加,我只是在PHPMyAdmin中使用SQL

2 个答案:

答案 0 :(得分:2)

虽然有使用正则表达式的解决方案,但在不知道您正在使用的数据库的情况下很难提出解决方案。

相反,您可以在执行like之前删除您不想要的标记:

WHERE REPLACE(LOWER(TweetComment), '#lebron james', '') LIKE LOWER('%lebron james%') AND
      REAPLCE(LOWER(TweetComment), '#nba', '') LIKE LOWER('%NBA%')

答案 1 :(得分:1)

如果您打算使用regexp

select * from twitter_result
where --ignore tweets that contain #lebron james and #nba
      TweetComment not regexp '.*#lebron james.*|.*#nba.*' 
      --select only those tweets that contain lebron james AND nba
and   TweetComment regexp '[[:<:]]lebron james[[:>:]]'
and   TweetComment regexp '[[:<:]]nba[[:>:]]'

所有要搜索的模式都必须明确说明,因为默认情况下MySQL不支持外观。

默认情况下,上述匹配不区分大小写。如果搜索需要区分大小写,请使用regexp binary。根据需要添加更多搜索词。

Sample fiddle