2016-07-28 75 views
0

我已經瀏覽了幾個類似於我的問題的類似主題,但我沒有找到任何可以幫助我的問題。我有這樣的SQL查詢:MySQL:在評論字符串中搜索關鍵字

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

我想搜索包含在同一時間詞「勒布朗·詹姆斯」和「NBA」一TweetComment。但是這兩個詞需要自己獨立。不管你喜歡不應該返回一個包含#LeBron詹姆斯和#NBA(或NBATalk)

例如鳴叫,它應該返回鳴叫這樣

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

,其中勒布朗 - 詹姆斯和NBA獨立(沒有#個字符)。我有LOWER那裏忽略大小寫敏感。任何幫助是極大的讚賞。由於

對不起,我忘了補充,我只是用SQL在phpMyAdmin

+0

不回答你的問題,但你並不需要'LOWER()'函數的。 – Siyual

+2

用你正在使用的數據庫標記你的問題。 –

+0

對不起,我在PHPMyAdmin – Nathan

回答

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默認情況下不支持lookarounds。

以上匹配默認情況下不區分大小寫。如果搜索需要區分大小寫,請使用regexp binary。根據需要添加更多搜索詞。

Sample fiddle

+0

謝謝對於你的建議,vkp。我把你的代碼扭曲了一下,我得到了這個:'SELECT * FROM twitter_result where TweetComment NOT REGEXP'。*#lebron james。* |。*#nba。*'和TweetComment REGEXP'。* lebron james。*'AND TweetComment REGEXP '^ nba [[:blank:]] | [[:blank:]] nba [[:blank:]] | [[:blank:]] nba $''。它不會返回包含單詞NBA的推文,就像這條推文:RT @TalkingNBAHoops:1.勒布朗詹姆斯 沒有辯論,遊戲中最好的球員 nba' – Nathan

+0

'TweetComment REGEXP'^ nba [[ :blank:]] | [[:blank:]] nba [[:blank:]] | [[:blank:]] nba $''不是必需的。使用答案中的* exact *查詢,您應該看到期望的行作爲結果。 –

+0

我試過了,它的效果好像沒有#在NBA面前。但是有些推文會返回,代碼中包含「@EstadisticasNBA:','@ StrictlyNBATalk','@ _eNBA'等字樣。我只希望勒布朗詹姆斯和NBA能夠獨處。任何提示?我非常感謝您的幫助和時間。 – Nathan

2

雖然有使用正則表達式的解決方案,這是很難提出一個不知道你正在使用的數據庫。

相反,你可以做like之前刪除不想要的標籤:

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

FWIW中使用SQL(我知道你知道這一點,但只是指出任何人在這個問題上碰到的問題),除非OP使用區分大小寫的排序規則,否則不應該需要'LOWER' – mituw16