在将值存储为 CSV 的列上使用多个标签进行最佳结果搜索
best-result search using multiple tags on a column that stores values as CSV
我将标签存储在一列中,这些标签用逗号分隔。我正在尝试创建最佳匹配搜索。
我不想匹配部分字符串,所以我在每个字符串的开头和结尾添加了一个逗号 ,apple,orange,banana,
这样我就可以使用 LIKE '%,apple,%
查找它不在乎位置是什么
如何根据与搜索标签
的最佳匹配顺序获取 ID 列表
是否有一种纯粹的 mySQL 方法来做到这一点?
现在,我正在 PHP 中处理它,方法是遍历每个标记并构建一个计算匹配项数量的数组。 99% 的时间最多会搜索 5 个标签。
同样在我的例子中,我使用了两个具有不同标签类别的标签fields/columns
没有模式,我想你需要这样的东西。
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
我将标签存储在一列中,这些标签用逗号分隔。我正在尝试创建最佳匹配搜索。
我不想匹配部分字符串,所以我在每个字符串的开头和结尾添加了一个逗号 ,apple,orange,banana,
这样我就可以使用 LIKE '%,apple,%
查找它不在乎位置是什么
如何根据与搜索标签
的最佳匹配顺序获取 ID 列表是否有一种纯粹的 mySQL 方法来做到这一点?
现在,我正在 PHP 中处理它,方法是遍历每个标记并构建一个计算匹配项数量的数组。 99% 的时间最多会搜索 5 个标签。
同样在我的例子中,我使用了两个具有不同标签类别的标签fields/columns
没有模式,我想你需要这样的东西。
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