在将值存储为 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

SQL FIDDLE DEMO

没有模式,我想你需要这样的东西。

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