mysql 提取某字段 field 下的所有分类的 sql 应该怎么写?

article 表

id title tags
1 article1 js,php
2 article2 php,java
3 article3 foo
4 article4 foo,bar

以上是逗号分隔的,那么应该得到[js,php,java,foo,bar] 总共 5 个标签(这样的设计可能不太好,因为要遍历所有记录)。

阅读 3.1k
3 个回答

文章和标签是一个多对多的关系,可以将该表拆分为三个表,article表,tag表,article和tag的关联表

感觉还是拆分下比较好吧,不然之后你要对tags做查询也很麻烦

表拆分就不说了,前面兄弟已经告诉你了这种结构多么的麻烦
这里给你个拆分这种逗号分隔字段的方法
举例说明:
a表c字段为1,2,3,4,5,6,7,8,就比如你的tags字段
随便找一个表t有自增字段id,自增值从1到1000,只要你的逗号分隔的字串逗号的个数少于这个1000就可以了,实际情况逗号很少你就减少这个1000就可以了,这里要注意的是要求1-1000不跳值,比如1,2,3,4,5,7少了个6是不行的,执行下面的sql就可以将c字段拆分成1-8的值

SELECT substring_index(substring_index(a.c,',',t.id),',',-1) 
FROM a join t 
ON t.id<=LENGTH(a.c)-LENGTH(REPLACE(a.c,',',''))+1;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题