您好:我想对标有关键字的产品进行“加权搜索”。(所以:不是全文搜索,而是 n 到 m 关系)。所以这里是:
Table 'product':
sku - the primary key
name
Table 'keywords':
kid - keyword idea
keyword_de - German language String (e.g. 'Hund','Katze','Maus')
keyword_en - English language String (e.g. 'Dog','Cat','Mouse')
Table 'product_keyword' (the cross-table)
sku \__ combined primary key
kid /
我想要的是为至少“包含”一个相关关键字的所有产品打分。如果我搜索 ('Dog','Elephant','Maus') 我想要那个
狗的得分为 1.003,大象的得分为 1.002,鼠的得分为 1.001
所以最不重要的搜索词从 1.001 开始,其他的都是 0.001++。这样,3.0 的下限将等于“AND”查询(必须找到所有三个关键字),1.0 的下限将等于“OR”。介于两者之间的任何东西或多或少匹配。特别是通过根据这个分数排序,最相关的搜索结果将是第一个(不管下限)......
我想我得做点什么
IF( keyword1 == 'dog', 1.001, 0) + IF...
可能在 SUM() 内部,并且可能在交叉表上的 JOIN 末尾带有 GROUP BY,是吗?但我对如何解决这个问题一无所知。
可行的是事先从关键字中获取关键字ID。这是一个便宜的查询。所以关键字表可以被忽略,这都是关于交叉和产品表的另一个......
我手头有 PHP 可以自动准备一个相当长的 PHP 语句,但我想避免更多的 SQL 语句。特别是因为我将限制分页模式结果的查询结果(通常为“LIMIT 0, 20”),所以通过脚本在结果之间循环大量的结果是不好的......
DANKESCHÖN,如果你能帮我解决这个问题:-)