我正在尝试创建一个搜索博客系统,根据用户建议显示博客。建议是存储在user_information
表中的基本主题标签。虽然博客也会有博客输入的一些标签,这些标签将存储在blog
表中。
现在因为我必须将user_information
表中的主题标签与blog
表匹配,所以我找不到这样做的方法。
我已经尝试过类似于mysql LIKE CLAUSE但我无法获得单一结果。
我的查询是[只是代表]
SELECT * FROM blog WHERE hashtags LIKE $ hashtags_from_user
答案 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.'";';
您必须在'
或"
之间放置您要搜索的字符串,而不仅仅是数字。