按标签搜索文章

时间:2014-01-30 11:15:55

标签: php mysql tags article

我无法通过他的标签搜索文章。

在我的mysql数据库表中,字段标记如下:

标签:“tag1,tag3,tag92,tagasd”

所以,如果我搜索tag1,它应该显示带有该标签的文章。 但它告诉我这个。 enter image description here

我也不知道为什么它在“数据”字段中给我一个错误,因为我将它用于所有事情并且没有看到错误。

但是我在mysql中使用这个查询:

'SELECT * FROM news WHERE tags LIKE "%'.$tag.'%" ORDER BY id DESC'

但我也用过

'SELECT * FROM news WHERE tags REGEXP "[[:<:]]'.$tag.'[[:>:]]" ORDER BY id DESC'

如果我正在搜索的标签位于多个帖子中,则结果搜索是正确的,但如果仅在一个帖子中,则看起来我已发布(图片) 这是您可以尝试(和查看)的链接: 如果你点击更大胆的链接,你会看到正确的文章,如果你点击“normale-size”链接,你会看到如上图所示。

http://www.qsec.it/Blog/Tags

编辑: NEWS CLASS函数SearchWithTag(..)

    public function SearchWithTag($tag)
{
    $db = new Database();
    $db->connect();
    $db->sql('SELECT * FROM news WHERE tags REGEXP "[[:<:]]'.$tag.'[[:>:]]" ORDER BY id DESC');
    $res = $db->getResult();
    return $res;
}

TAGS-SEARCH FILE

                                <?php
                        $news = new News();
                    $newsArray = $news->SearchWithTag($categoria);
                    foreach($newsArray as $arr)
                    {
                ?>
                    <article itemscope itemtype="http://schema.org/Article">
                        <div class="article-body">
                            <strong class="contactpage" itemprop="name"><?php echo utf8_encode($arr['titolo']); ?></strong>                         
                            <div class="article-data">
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?php echo date('d M Y - H:i', $arr['data']); ?>
                            <br>
                            </div>
                            <div class="article-tag">
                                    <?php
                                        $tag = explode(",",$arr['tags']); 
                                        for ($i=0; $i<count($tag);$i++)
                                        {
                                            $cat = str_replace(" ", "", $tag[$i]);
                                            echo "<a href=\"/Blog/Tags/".$cat."\">".$cat."</a>";
                                            echo " <span class=\"separator\">|</span>\n";
                                        }
                                    ?>
                            </div>
                            </em></strong>
                            <div class="read-more">
                            <br>
                                <b><i class="pull-left"><a href="/Blog/Articoli/<?php echo $arr['titolo_url']; ?>.html">Vai all'articolo..</a></i></b>
                                <i class="pull-right" itemprop="name"><?php echo $arr['autore']; ?></i>
                            </div>
                        </div>
                        &nbsp;
                    </article>

                <br>

                <?php
                    }
                                 ?>

2 个答案:

答案 0 :(得分:2)

您可以更改数据库的结构。

你有帖子表

|| ID_post || POST_NAME ||

|| || 000001富||
|| 000002 ||酒吧||

你有标签表

|| tag_name ||

|| IT ||
||安全||

您有“链接”表格

|| || id_post tag_name ||

|| 000001 || IT ||
|| 000001 ||安全||

在表格链接中,您可以看到ID为000001的帖子(标题为FOO的帖子)标有IT和安全性。因此,如果要检索标记为“IT”的所有帖子ID,请选择tag_name == security的所有行。

答案 1 :(得分:1)

由于你正在用背后的逗号标记你的标签,我会假设你忘记在你的数据库中删除你的逗号或者逃脱了它们并且忘记在你的查询后替换它们。

$tags = preg_replace('/\s*,\s*/', ',', $tagsrow);
$tags = explode(",", $tags);