最佳结果搜索使用列上的多个标记,将值存储为CSV

时间:2015-07-25 20:48:26

标签: php mysql sql tags sql-like

我的标签存储在一个用逗号分隔的列中。我正在尝试创建最佳匹配搜索。

我不想匹配部分字符串,所以我在每个字符串的开头和结尾添加了一个逗号,就像,apple,orange,banana,一样,这样我就可以使用LIKE '%,apple,%查找并且它不会关心这个职位是什么。

如何根据与搜索标记相比的最佳匹配顺序获取ID列表

有一种纯粹的mySQL方式吗?

现在我正在PHP中处理它,循环遍历每个标记并构建一个计算匹配数的数组。 99%的时间最多可搜索5个标签。

同样在我的情况下,我使用两个标记字段/列具有单独的标记类别

1 个答案:

答案 0 :(得分:1)

SRFI-26

如果没有架构,我想你需要这样的东西。

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