如何从字符串中提取标签

时间:2014-02-26 17:50:43

标签: php mysql string tags extract

我使用PHP,PDO扩展和MySQL作为默认DBMS。我也有一个准备好的标签表,在我的数据库中有两个idtag列。

我的目的是“从标签表中存在的字符串中自动提取匹配的标签”,我的问题是进行PDO查询来执行该操作。

例如,如果字符串是“昂贵的高质量计算机硬件”,在删除少于3个字符的单词后,如果我执行如下的查询:SELECT id FROM tags WHERE tag LIKE %Expensive%And%High%Quality%Computer%;,文字标签如“昂贵”或“计算机” “永远不会找到!

同时执行SELECT id FROM tags WHERE tag='expensive' OR tag='and' OR tag='high' OR tag='quality' OR tag='computer' OR tag='hardware';之类的查询也不会包含“高质量”或“昂贵的硬件”等标签。

每个字符串将执行一次此查询,在这种情况下处理时间无关紧要。

提前谢谢你,对不起我的解释感到抱歉。

2 个答案:

答案 0 :(得分:1)

你几乎拥有它;只需在每个术语周围添加通配符:

SELECT id 
FROM tags 
WHERE tag='%expensive%' 
    OR tag='%high%' 
    OR tag='%quality%' 
    OR tag='%computer%'
    OR tag='%hardware%';

请注意,我从条款中排除了“和”。你可能想检查字符串的长度,不要使用3个或更少的字符,因为“%和%”会匹配很多东西,如“沙”,“平淡”,“宏伟”等。

答案 1 :(得分:0)

我认为你可以使用类似的东西:

SELECT id FROM tags WHERE tag LIKE '%expensive%' OR tag LIKE '%and%' OR tag LIKE '%high%' OR tag LIKE '%quality%' OR tag LIKE '%computer%' OR tag LIKE '%hardware%';

在您的查询中,您将搜索范围限制为像tag ='hardware'这样的确切字词。这与昂贵的硬件不匹配。