我正在实现用于查找页面的标签,并且基本上具有3个表结构,标签,页面和标签页。对于网站的菜单系统,我希望将少量链接映射到标签,以便对相关性做出有根据的猜测。不是在寻找谷歌级别的搜索结果,而是仅仅搜索一个可以排除许多结果的术语。例如,对于浪漫的链接,除了浪漫之外,我还想收集爱情,关系等标签。由于标签是如此常见,是否有一个已建立的标签引擎来通过标签提取结果而没有完全匹配?我正在考虑在其中构造一个包含多个搜索词的where子句,但它开始变得有点笨拙。有没有比下面更好的方式?
潜在方法:
$sql = "SELECT * FROM tagpages WHERE";
switch ($tag)
{
case "romance":
$where = "tag = 'relationship' ||
tag== 'love' ||
tag== 'breakup";
break;
case "sports":
$where = "tag = 'football' ||
tag== 'baseball' ||
tag== 'hockey";
break;
case "politics":
$where = "tag = 'election' ||
tag== 'presidential'";
break;
default:
$where = "";
}
$sql .= $where;
答案 0 :(得分:0)
好的开始你只是匹配tag = string时的情况,你说明是用case结构排除所有其他标签。
您可以使用“%”模数符号来匹配LIKE字符或匹配字符,然后模拟字符串的结尾,这意味着字符串的其余部分看起来像什么,只要模数符号之前的这些字符匹配。 “CHAR%”将返回角色,魅力
您可以使用<>排除这意味着没有,但你可能需要切换到IF ... ELSE结构,如果你知道所有可能的匹配,我认为你可以只声明标签,然后它们将编号为1 ... n你可以匹配在占位符号上...不确定那个。
答案 1 :(得分:0)
对于发现此问题的任何人,我选择了在SQL查询中使用Match Against的更好的方法。对于与链接类似的标签或搜索词,即关系,浪漫,爱情等,只需创建一串关键词,无论你想要多长时间,如$ keywords =“浪漫,爱情,婚姻”;您可以在学习新术语时添加它。然后运行一个sql查询$ sql =“SELECT * FROM pages Match(shdescript,longdescript)Against('$ keywords')”;为此,您需要在要搜索的字段(即shortdescript longdescript)中在MYSQL中创建全文索引。好的一点是它实际上按照相关性对搜索结果进行排名,因为某些MYSQL引擎具有相当强大的搜索引擎功能。例如,您可以指示它使用Mysql fulltext search relevance across multiple tables中的数学百分比来加权某些内容,或者只使用默认值。