dongmu2517 2013-11-03 15:55
浏览 21
已采纳

查找带有常用标记的mysql条目

I have articles stored in a MySQL table. Now I want to display related articles. So I integrated a field called "tags", which stores all tags separated by commas. Until now I search for common tags like this:

    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";

That created a query like this:

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

I am wondering if there is a more efficient way to solve this. The negative side of my current solution is the "%" which causes that extreme short Tags like "green" collide with "greenteam" .

  • 写回答

1条回答 默认 最新

  • dongshao1021 2013-11-03 16:30
    关注

    You should store your tags in a different table "tag" and add relationships between each article and tag in an another table called "article_tag" for example.

    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')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)