当我开始尝试实现这一点时,我得到了相当的困扰。我如何管理M:N Post-Tag关系(例如编辑/删除)
一些业务规则
1后可以有很多的标签。 1标签可以有很多文章
数据库看起来像。
- 帖子(ID,标题,正文,...)
- Posts_Tags(邮局,标签)
- 标签(标识,标签,...)
当我插入 - 直截了当
- 标签将来自用户输入作为逗号分隔值
explode($tags)
获得个人标签- 的foreach $标签
- 如果检查标签存在
- 如果是,获得ID
- 如果没有,插入标签&获得ID
- 插入柱与标签
我在想这是不是最好的方法?如果标签存在,我是否可以取消循环chk?或将其简化为1个查询?
更新后,升技更难
如何检查用户是否更新任何标记。另一个循环?但这个时候会有一些变化(斜体)
explode($tags)
获得个人标签- 的foreach $标签
- 如果检查这个帖子已被标记与此标记
- 如果没有,
- 是否存在标签?
- 是,获得ID
- 没有,插入并获得ID
- 是否存在标签?
- 如果是,获得ID与标签
嗯
我使用PHP 5.3,Zend Framework的1.10,学说2
你说得对,更新了我的帖子。删除和插入所有标签不会降低性能太多我猜? – 2010-07-29 13:32:39
我从来不喜欢多对多的标签模式。看起来效率不高,为了获取标签列表,必须将3个表加在一起而不是2个,特别是因为tag和post_tag表可以变得相当大,这取决于网站的活跃程度。 – KallDrexx 2010-07-29 13:36:41
@ KallDrexx不幸的是似乎是[最好的方法](http://stackoverflow.com/questions/3152850/best-way-to-store-a-many-to-many-relationship-in-mysql)到做到这一点 – NullUserException 2010-07-29 13:40:59