找出其他相似的文章?A,B,C.......

假設文章有一個欄位叫做 tags 稱他標籤好了~
每一個文章都有類似的標籤,例如

id / blog_title / tags
1 / Hi / A,B,C
2 / 你好 / A,B
3 / 早安 / C,D

我想要利用 tags 找出其他有跟這篇文章相似的文章
假設我現在在瀏覽 文章1 好了
下面會出現一個延伸閱讀,他會找到有跟他類似標籤的文章並顯示
所以他會顯示 文章2文章3
如果瀏覽 文章2 ,則只會顯示 文章1 為他的延伸閱讀
如果瀏覽 文章3 ,則只會顯示 文章1 為他的延伸閱讀

SELECT blog_title FROM `blog`
        WHERE tags LIKE '%{ ??? }%'
        LIMIT 3

我能用何種函數在 mysql or php 中,就能做到這種比對?
就是利用文章自己的 tag 去找其他有符合的 tag

阅读 2.9k
4 个回答
SELECT
  blog_title
FROM
  blog
WHERE
  tags RLIKE
  CONCAT('[[:<:]]', REPLACE('A,B,C', ',', '[[:>:]]|[[:<:]]'), '[[:>:]]')

A,B,C 处,可换成你的参数占位符{???} (不知什么软件用这么怪异的占位符)

[[:<:]][[:>:]]表示词的边界,可以是标点或字符的起始和结束位置。

rlike的意思是正则匹配。

我建议 tags 分出来一个表,然后加一个中间表维护文章和 tags 的关系,这样查询和后期维护都会更好

我认为比较不错的方式是使用explode后进行like,但mysql内没有explode方法,你可以参考这个文章,自建一个explode
https://stackoverflow.com/que...
或者,你可以使用php作为辅助,,explode下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题