我试图为包含产品的网站制作迷你搜索引擎。我已经考虑全文搜索,LIKE子句等,但我仍然想继续我的方式,因为数据库将会非常巨大(数以亿计的产品)。复杂的mysql选择语句
设计是这样的 - 我有一个表单词配对单词ID。我有另一个表,其中包含产品匹配的产品ID的所有字对ID。当用户搜索例如“2GB存储卡”时,该脚本解析“2GB”,“存储器”和“卡”。
然后我用:
SELECT pid
FROM indx_0
WHERE wid = 294 OR wid = 20591 OR wid = 330
我结束了对配套产品的话。
我有一个PHP算法,以决定哪些产品取决于多个事情去顶部。但是当我将380k结果加载到php数组中时,执行时间变得非常慢。很清楚,我不能那样做。但如果我限制每个单词1000个结果,执行速度很快 - 但它不包括所有可能的结果。
在“indx_0”表中,每个“pid”(产品ID)对于“wid”(单词id)是唯一的。显然,有些产品将会有超过1个匹配。我想检索那些与“wid”有最多匹配的“pid”。
假设有2000个产品匹配“2GB”和200,000个匹配“卡片”和50,000个匹配的“内存”,但只有20个匹配所有这3个字词的产品,以及200个匹配这些字词组合的产品。
是否有可能检索这20个产品以及部分匹配的200个产品?
哇非常感谢你!只有一件事我需要改变..“WHERE pid in”实际上是“WHERE wid in”。除此之外它就像我想要的那样工作。 – nick 2012-01-28 07:18:37