doubleyong
管理员
管理员
  • 最后登录2026-05-25
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:8055回复:0

【原创】数据库中逗号的灵活使用 — 例:标签的使用

楼主#
更多 发布于:2017-09-17 22:11
在数据库的设计中,经常会遇到这种情况,如一个课程,它可以标记为多个标签 , 如:一个HTML课程,你可以为这个添加标签,HTML, 前端,Web 等相关的标签,来说明这个课程。
       那在数据库设计时,如何去设计
        我们都知道,一个课程,可以有多个标签。 一个标签可以标记多个课程。 也就是说课程与标签之间的关系为多对多。这种情况大家也清楚,当两个表之间的关系为多对多时。我们通常会在建立一个表,来说明两个表之间的关系。
       上面的做法是没有错,但是为了方便,我们经常也会有违反正常的处理方法。
       今天,就给在家推荐一种这样的处理方式。
      如上,所说的,一个课程与标签之间的关系,虽然是对多对,但是还是只用了两个表,那数据是如何存储的呢,请看下图:
    

图片:database.png


  
   将,多个标签的ID,使用逗号连接,然后,进行存在。注,这里的逗号,不只是id之间才有,前后也有哦。
  前后,也加逗号的目的是,能够更加准备的找到对应的id;
    如,找包括了标签ID为3 的,  我们可以找 tags字段中 查询  ,3, 如果返回的ID大于0 说明包括3 。 而如果前面不加豆号  ,只有3, 那可能33, 或43, 也会被查询出来,就不能达到精确查找了。
   最后,还有一个问题,如果根据id集合,查询出对应的标签名,并也用逗号分隔。参考以下mysql代码:
SELECT GROUP_CONCAT(TagName) AS Tags FROM Tag WHERE LOCATE (CONCAT(',',Id,','),',33,34,35,')>0
   此外用了,三个mysql 的内置方法:
    CONCAT( ) :  字符串连接
   LOCATE( ) : 模糊查询,没有查询到,则返回0
   GROUP_CONCAT( ): 行列转换,并用逗号分隔

分享就到这里结束,如果你有更好的方式,欢迎分享

最新喜欢:

chenyunchenyu...
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号