Php 查找带有公共标记的mysql条目
我将文章存储在MySQL表中。现在我想显示相关文章。所以我集成了一个名为“tags”的字段,它存储所有用逗号分隔的标签。到目前为止,我一直在搜索以下常见标记:Php 查找带有公共标记的mysql条目,php,mysql,tags,Php,Mysql,Tags,我将文章存储在MySQL表中。现在我想显示相关文章。所以我集成了一个名为“tags”的字段,它存储所有用逗号分隔的标签。到目前为止,我一直在搜索以下常见标记: foreach (explode(',', $article['tags']) as $key => $value) { if ($key != 0) $search.= ' OR'; $search .= " `tags` LIKE '%" . mysql_real_
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%'
创建了如下查询:
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”发生冲突。您应该将标记存储在不同的表“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')
创建下表方案不是更好吗<代码>文章===id标题。。。tags===article_id tag它使您的第三张桌子变得不必要。然后,我必须运行两个查询:
Select article\u id FROM tags where tag='tag1'或tag='tag2'
Select title,id FROM article where id='$id'
我是否可以以某种方式将它们组合在一起?您可以这样做,但它与article\u tag表更为简洁。我想你可以这样组合你的查询:SELECT article.title,article.id FROM article JOIN tags ON tag.article\u id=article.id WHERE tags.tag IN('tag1','tag2')
这一个应该有效(标记缺少一个s):SELECT article.title,article.id FROM article JOIN tags ON tags.article\u id=article.id WHERE tags IN(“tag1”、“tag2”)