使用Mysql进行文本搜索

时间:2014-01-22 09:39:36

标签: php mysql sql

我正在尝试创建一个搜索博客系统,根据用户建议显示博客。建议是存储在user_information表中的基本主题标签。虽然博客也会有博客输入的一些标签,这些标签将存储在blog表中。

现在因为我必须将user_information表中的主题标签与blog表匹配,所以我找不到这样做的方法。

我已经尝试过类似于mysql LIKE CLAUSE但我无法获得单一结果。

我的查询是[只是代表]

  

SELECT * FROM blog WHERE hashtags LIKE $ hashtags_from_user

2 个答案:

答案 0 :(得分:1)

您没有正确转义该值,您需要将哈希标记括在引号

"LIKE '". $hashtags_from_user ."'";

此外,当您使用非规范化数据库时,您将在SELECT语句中支付价格(哈希标记应在hash_tags表中拥有自己的行,而blog将通过SELECT * FROM blog WHERE hashtags LIKE '#hashtag1,#hashtag2,#hashtag' 引用这些行多对多或多对一的关联)

目前查询的输出是:

$tags = explode(',', $hash_tags_from_user);

如果您需要匹配各个标签,这不会为您提供所需的结果。

唯一的灵魂就是阅读用户有标记字符串,将其分解为每个标记(使用$where = array(); $select = 'SELECT * FROM foo'; foreach($tags as $tag) { $where[] = sprintf('tag LIKE \'%s\'', $tag); } if (! empty($where)) $select .= 'WHERE ' . implode(' OR ', $where); 然后构建一个查询以包含所有标记

{{1}}

请不要使用上面的内容,因为它只是和示例(并且对简单的SQL注入开放)考虑使用预处理语句,使用PDO / MySQLi。

答案 1 :(得分:0)

试试这个:

$sql = 'SELECT * FROM blog WHERE hashtags LIKE "'.$hashtags_from_user.'";';

您必须在'"之间放置您要搜索的字符串,而不仅仅是数字。