我的标签存储在一个用逗号分隔的列中。我正在尝试创建最佳匹配搜索。
我不想匹配部分字符串,所以我在每个字符串的开头和结尾添加了一个逗号,就像,apple,orange,banana,
一样,这样我就可以使用LIKE '%,apple,%
查找并且它不会关心这个职位是什么。
如何根据与搜索标记相比的最佳匹配顺序获取ID列表
有一种纯粹的mySQL方式吗?
现在我正在PHP中处理它,循环遍历每个标记并构建一个计算匹配数的数组。 99%的时间最多可搜索5个标签。
同样在我的情况下,我使用两个标记字段/列具有单独的标记类别
答案 0 :(得分:1)
如果没有架构,我想你需要这样的东西。
SELECT
t.tagID,
t.tagText,
num_match.num_appear,
((LENGTH(`tagText`) - LENGTH(REPLACE(`tagText`, ',', '')))/LENGTH(',')) - 1 as wordnumber,
(num_match.num_appear / (((LENGTH(`tagText`) - LENGTH(REPLACE(`tagText`, ',', '')))*1.0/LENGTH(',')) - 1)) *100 as porcentage
FROM
tblTAG t left join
(SELECT tagID, count(tagID) as num_appear
FROM
(( SELECT tagID
FROM tblTAG
WHERE tagText LIKE '%,apple,%'
) union all
( SELECT tagID
FROM tblTAG
WHERE tagText LIKE '%,banana,%'
)) as result
GROUP BY tagID
) as num_match
ON t.tagID = num_match.tagID