Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查找带有公共标记的mysql条目_Php_Mysql_Tags - Fatal编程技术网

Php 查找带有公共标记的mysql条目

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_

我将文章存储在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%'
创建了如下查询:

    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”)