MySQL search exact word with $ in word

前端 未结 2 1629
执笔经年
执笔经年 2021-01-27 15:16

I\'ve been trying to find exact words and my research isn\'t helping me.

Solutions I\'ve found:

$query .= \"WHERE text REGEXP \'[[:<:]]($word)[[:>:         


        
相关标签:
2条回答
  • 2021-01-27 15:37

    MATCH AGAINST doesn't work exactly how you'd think it would.

    This can be summarized by Casey Fulton as "...FULLTEXT searches only [return] anything if the number of results is less than 50% of the total table size..."

    So instead, I'm searching for all the LIKEs and then filtering out exact words by a REGEX. I'm doing this to cut down on the process load for REGEX.

    The following is my solution:

    $likerows = "(SELECT * FROM `tweets` WHERE text LIKE '%$q%') AS likerows ";
    $regexrows = "(SELECT * FROM $likerows WHERE text REGEXP('^.* $q .*$')) AS regexrows ";
    $query = "SELECT * FROM $regexrows ";
    

    I put spaces around the $q because I want to match a sentence-structured word (which is preceeded and followed by a space).

    Also, I'm searching for "words" that start with $. This was an issue and here's what I did to solve that problem:

    if(substr($q, 0, 1) == '$') $q = '\\\\' . $q; // you have to escape the backslash that escapes the $ -- it's nuts.
    

    Best of luck.

    0 讨论(0)
  • 2021-01-27 15:39

    You will want to use MySql Full Text Search functions to accomplish what you describe above.

    Enjoy!

    0 讨论(0)
提交回复
热议问题