Php 更具体地说,比如使用定义的变量进行搜索

Php 更具体地说,比如使用定义的变量进行搜索,php,mysql,Php,Mysql,我有一个脚本可以搜索我的数据库中的hashtag,我需要搜索s.data中特定的东西$tag被定义,并且将是hashtag ex.peter。当我搜索rhashtag peter时,我得到了peters-peterson-peterpeter的结果。如何在结尾处切断字符串,使其只搜索与peter完全匹配的结果 我试过了 REGEXP '[[:<:]]#$tag[[:>:]]' 尝试: 不要使用[[:如果数据中的数据类似于'tag1tag2tag7tag4',则此条件应该有效 类

我有一个脚本可以搜索我的数据库中的hashtag,我需要搜索s.data中特定的东西$tag被定义,并且将是hashtag ex.peter。当我搜索rhashtag peter时,我得到了peters-peterson-peterpeter的结果。如何在结尾处切断字符串,使其只搜索与peter完全匹配的结果

我试过了

 REGEXP '[[:<:]]#$tag[[:>:]]' 
尝试:

不要使用[[:如果数据中的数据类似于'tag1tag2tag7tag4',则此条件应该有效

类似“%$tag%”的数据或类似“%$tag”的数据


我想警告一下,使用OR会失去索引优势,但最前面的通配符已经说明了这一点。

这不是一个有效的regexp。请尝试\\b$tag\\b.@JonathanKuhn MySQL不使用\b.@Barmar-bah,谢谢。我现在明白了。我应该删除like吗?还是说REGEXPLIKE和regexp是两个不同的运算符。LIKE用于匹配通配符模式,REGEXP用于匹配正则表达式。谢谢。hashtag搜索函数没有返回任何结果yetSee关于$friendsCSV的最后一部分。您可以对示例数据进行sqlfiddle处理吗?它在像“%$tag%”这样的s.data或“%$tag”这样的s.data修改时不会给出任何结果。只有当hashtagg位于数据的末尾或紧跟着另一个哈希标记。@peter$tag变量的内容是什么。@Barmar假设数据的格式与我的序言一样,它覆盖了数据字符串中所有可能的位置。如果它是唯一的标记,则位于末尾;如果它不是最后一个标记,则必须紧跟着另一个。@peter After看看你在另一个答案中提供的提琴,看起来数据的格式与我前面提到的不同;从你提供的信息来看,不清楚你是想用hash“hash”还是以hash开头的hash来获取内容。如果是前者,你可以指望后面跟着标记的单词/短语空格,除非它们是最后一个单词/短语。您应该能够使用与我上面所述非常类似的内容;只需将“%$tag%”更改为“%$tag%”。如果是后者,您的原始查询应该是可以接受的。
 $sql = "SELECT s.*, u.avatar
        FROM status AS s
        LEFT JOIN users AS u ON u.username = s.author
        WHERE s.author IN ('$friendsCSV') AND (s.data LIKE '%#$tag%') AND (s.type='a' OR s.type='c' OR s.type='d')
        ORDER BY s.postdate DESC LIMIT 20";
 AND s.data REGEXP '#$tag[[:>:]]'
(s.type='a' OR s.type='c' OR s.type='d')
s.type IN ('a', 'c', 'd')
FIND_IN_SET(s.author, '$friendsCSV')