如何返回MySQL记录包含子字符串的所有结果?

时间:2013-12-22 18:31:50

标签: php mysql twitter

例如,如果我在文本字段中搜索#pumpkins,则应返回包含#pumpkins的所有记录。我不确定要使用哪些MySQL函数。目标是复制Twitter搜索功能,用户可以搜索任何主题标签,并返回包含主题标签的所有帖子(推文)。起初,我认为使用LOCATE()SUBSTRING()函数就足够了,但在做了一些研究后我不太确定。

$getHT = "SELECT `post`, `author`, `date`, `id`, `subid`
          FROM `posts` WHERE SUBSTRING(post, LOCATE('$q', post)+7, 
          LOCATE('$q', post) - LOCATE('$q', post) - 7) LIKE '%$q%' ORDER BY `date` DESC LIMIT 7";
$seaHT = $con->query($getHT); //Search Hashtags: seaHT
foreach ($seaHT->fetchAll() as $hshtag) { 
    echo '<li><div class="postContent">'. $hshtag['post'] .'</div></li>';
}

我尝试使用预先存在的代码,但到目前为止无济于事。使用REGEX()函数会更好地解决我想要实现的问题吗?

更新:另一个例子:

-User搜索#candy posts表中的Posts列包含以下记录

1 - “#Candy很甜蜜”

2-“比萨很美味”

3-“糖果对你不好”

4-“我#love #candy”

-Query只返回 记录1和4。

仅使用LIKE('%$ q%)返回所有内容,或者如果我设置限制并订购结果,则返回最后7个帖子。

$query = $_GET['q'];
$q = str_replace('#', '%23', $query);
$getHT = "SELECT `post`, `author`, `date`, `id`, `subid`
FROM `posts` WHERE `post` LIKE '%$query%' AND LENGTH('$q') > 0 ORDER BY `date` DESC LIMIT 7";

0 个答案:

没有答案