【发布时间】:2017-11-05 02:22:21
【问题描述】:
我有一个关键字表(ID、ean、keyword)和另一个包含产品详细信息的表。我希望搜索返回所有关键字至少匹配一次的 EAN,但是我得到的最接近的是以下内容,但这会返回包含第一个词的匹配项,例如 3 次。
举个例子,假设我有一个名为“通用耳机 - iPhone、iPad、iPod”的产品,我搜索了 'gen%' 'hea%' 'ip%' 它会作为匹配项返回,但它由于 3 个 ip 词,它也将匹配“Apple 耳机 - iPhone、iPad、iPod”,这是不希望的。
SQL Fiddle 我希望 EAN 1 仅匹配,因此每个术语的匹配项至少需要 1 个。
任何帮助将不胜感激。
选择计数(keywords.ean)作为抄送, 产品。* FROM 关键字 内连接产品 ON products.ean = 关键字.ean 在哪里 ( 关键字 LIKE 'gen%' ||像'ip%'这样的关键字 ||关键字 LIKE 'hea%') 分组依据(keywords.ean) 有 cc>=3 ORDER BY `products`.`ean` ASC更新:这会得到预期的结果,但必须有更有效的方法来做到这一点。
选择产品。* 来自产品 INNER JOIN (SELECT ean, count(*) as tc1 FROM 关键字 WHERE(关键字如 'gen%' ) 分组 HAVING tc1 > 0 ) as t1 ON t1.ean = products.ean INNER JOIN (SELECT ean, count(*) as tc2 FROM 关键字 WHERE(关键字如 'ip%' ) 分组 HAVING tc2 > 0 ) as t2 ON t2.ean = products.ean INNER JOIN (SELECT ean, count(*) as tc3 FROM 关键字 WHERE(关键字如 'hea%' ) 分组 HAVING tc3 > 0 ) as t3 ON t3.ean = products.ean 按产品订购.ean【问题讨论】:
-
好的,我已经用 SQL Fiddle 更新了帖子。
-
我认为 GregHNZ 几乎做到了。只需将
COUNT(*)位更改为COUNT(DISTINCT keyword) = 3
标签: mysql