我有文章存储在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%'
我想知道是否有更有效的方法来解决这个问题。我当前解决方案的负面影响是“%”,导致像“绿色”这样的极端短标签与“greenteam”发生碰撞。
答案 0 :(得分:1)
您应该将标记存储在不同的表“标记”中,并在另一个名为“article_tag”的表中添加每篇文章和标记之间的关系。
<强> TABLES 强>
article
=======
id
title
...
tag
=======
id
label
article_tag
=======
article_id
tag_id
<强> QUERY 强>
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')