繁体   English   中英

复杂的mysql select语句

[英]complex mysql select statement

我正在尝试为包含产品的网站制作迷你搜索引擎。 我已经考虑过全文搜索,LIKE条款等等,但我仍然想继续我的方式,因为数据库将是非常庞大的(数以亿计的产品)。

设计就是这样的 - 我有一个表格将单词与单词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个产品匹配其中2个单词的组合。

是否可以检索这20种产品以及部分匹配的200种产品?

您可能需要做的是按产品ID分组并获得匹配的计数。 然后让大多数计数命令下降...即:一个产品匹配所有3个wID而其他只匹配1,3个计数将在列表中排在第一位

SELECT pid, count(*) WordMatchCount
   FROM indx_0 
   WHERE pid in ( 294, 20591, 330 )
   group by pid
   order by WordMatchCount desc
   limit 1000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM