0

我有存储在 MySQL 表中的文章。现在我想展示相关文章。所以我集成了一个名为“tags”的字段,它存储了所有用逗号分隔的标签。到目前为止,我搜索的是这样的常见标签:

    foreach (explode(',', $article['tags']) as $key => $value) {
        if ($key != 0)
            $search.= ' OR';
        $search .= " `tags` LIKE '%" . mysql_real_escape_string($value) . "%'";
    }
    $query = "SELECT title, id  FROM `article` WHERE $search";

这创建了一个这样的查询:

SELECT title, id FROM `article` WHERE `tags` LIKE '%tag1%' OR `tags` LIKE '%tag2%'

我想知道是否有更有效的方法来解决这个问题。我当前解决方案的不利方面是 "%" ,它会导致像 "green" 这样的极短标签与 "greenteam" 发生冲突。

4

1 回答 1

1

例如,您应该将标签存储在不同的表“tag”中,并将每篇文章和标签之间的关系添加到另一个名为“article_tag”的表中。

表格

article
=======
id
title
...

tag
=======
id
label

article_tag
=======
article_id
tag_id

询问

SELECT article.id, article.title 
FROM article
JOIN article_tag ON article_tag.article_id = article.id
JOIN tag ON article_tag.tag_id = tag.id
WHERE tag.label IN ('tag1', 'tag2')
于 2013-11-03T16:30:08.283 回答