我有一个关键字表(ID,EAN,关键字)和另一个包含产品详细信息的表。我希望搜索返回所有关键字至少匹配一次的EAN,但是我得到的最接近的是以下内容,但是这将返回其中包含第一个术语的匹配3次。
举个例子,假设我有一个名为“通用耳机-iPhone,iPad,iPod”的产品,我搜索了“ gen%”,“ hea%”,“ ip%”,它会作为匹配项返回,但也会匹配由于3个ip字词,“ Apple耳机-iPhone,iPad,iPod”是不希望的。
SQL Fiddle
我只想让EAN 1匹配,因此每个术语的匹配必须至少为1。
任何帮助将非常感激。
SELECT Count(keywords.ean)AS抄送,
产品。*
FROM关键字
INNER JOIN产品
在products.ean = keyword.ean上
在哪里(
关键字LIKE'gen%'
||像“ ip%”这样的关键字
||关键字“ hea%”
GROUP BY(keywords.ean)
cc> = 3
订购`products.`ean` ASC
更新:这样可以获得预期的结果,但是必须有更有效的方法来做到这一点。
SELECT产品。*
从产品
INNER JOIN(SELECT ean,count(*)为tc1
FROM关键字
在哪里(“ gen%”之类的关键字)
分组依据
将tc1> 0)作为t1的t1.ean = products.ean
INNER JOIN(SELECT ean,count(*)为tc2
FROM关键字
WHERE(“ ip%”之类的关键字)
依分组
将tc2> 0)设为t2 ON t2.ean = products.ean
INNER JOIN(SELECT ean,count(*)为tc3
FROM关键字
在哪里(“ hea%”之类的关键字)
依分组
tc3> 0)as t3 ON t3.ean = products.ean
ORDER BY产品
最佳答案
也许您正在追求类似这样的东西...
SELECT p.ean
, p.description
FROM products p
JOIN keywords k
ON k.ean = p.ean
WHERE k.keyword LIKE 'iP%'
OR k.keyword LIKE 'hea%'
OR k.keyword LIKE 'gen%'
GROUP
BY p.ean
HAVING COUNT(DISTINCT CASE WHEN k.keyword LIKE 'iP%' THEN 'iP'
WHEN k.keyword LIKE 'hea%' THEN 'hea'
WHEN k.keyword LIKE 'gen%' THEN 'gen'
ELSE keyword END) = 3;
http://sqlfiddle.com/#!9/270f9/25
关于mysql - 使用MySQL组中的like匹配所有关键字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44349830/