我正在尝试从 mysql 数据库中检索条目,其中数据库中的关键字对应于文章的标题或文章的标签。目前我正在使用 instr,但这还不够具体,因为我发现对于较短的关键字检索了太多不相关的结果 - 即。我尝试检索标题或标签列表中包含“艺术”一词的条目,但最终检索到带有“文章”等词的其他条目。
我有以下表结构。数据库有一个预定义的标签列表。每个文章类别都从主标签列表中分配了一些标签:
tags_tbl (overall tags list)
tt_tag_id (pk) int
tt_tag varchar
category_tag_assignments_tbl (the category which a tag is assigned to)
cta_id (pk) int
cta_tag_for_id (fk to tags_tbl.tt_tag_id) int
cat_for_id (fk to category table) int
我的查询是:
SELECT * FROM tags_tbl INNER JOIN category_tag_assignments_tbl ON tags_tbl.tt_tag_id = category_tag_assignments_tbl.cta_tag_for_id WHERE instr('The Article Title' , tags_tbl.tt_tag) > 0 OR instr('these,are,article,tags' , tags_tbl.tt_tag) > 0
我怎样才能做到这一点,以便我可以在文章标题和文章标签内搜索一个完整的单词,而不检索字符串也可能出现的较长单词,同时还考虑到标签列表是用逗号分隔,没有空格?我想尽量减少 php 处理的数量 - 我无法控制标题和标签的实际呈现,因为它们是由外部源提供的,除非我提前用 php 修改它们。
我正在考虑合并以下正则表达式,我在stackoverflow上找到了它,但我不知道如何在这种情况下应用它,因为我在我的搜索词中搜索(对不起,我知道笨拙的措辞,但我想不出怎么说呢):
WHERE tags_tbl.tt_tag REGEXP '[[:<:]]art[[:>:]]'
谢谢!