当前位置:  开发笔记 > 编程语言 > 正文

来自多个类别最佳实践的项目

如何解决《来自多个类别最佳实践的项目》经验,为你挑选了1个好方法。

我正在制作类别中的项目列表,问题是该项目可以是多个类别.在类别中存储项目以及如何列出类别及其子类别中的所有项目的最佳做法是什么?我正在使用Zend Framework和MySQL来解决这个问题.

谢谢你的回复.

对不起我的英语不好 :)



1> Ian Varley..:

那么,你有一个类别的层次结构,是吗?是一级(类别和儿童类别)还是任何数字(儿童可以有孩子等)?这将影响解决方案的内容.

一般来说,你可以通过多对多的关系建模这样的东西,比如:

CREATE TABLE Item(
  item_id INT NOT NULL, 
  item_name VARCHAR(255) NOT NULL
)
CREATE TABLE Category(
  category_id INT NOT NULL, 
  category_name VARCHAR(255) NOT NULL
)
CREATE TABLE Item_Category(
  item_id INT NOT NULL REFERENCES Item(item_id), 
  category_id INT NOT NULL REFERENCES Category(category_id)
 )

"Item_Category"中的记录表示列出的项目在列出的类别中.然后,您可以在这些表中的2个(或3个)之间进行连接,以列出哪些项目属于哪些类别:

SELECT I.* 
  FROM Item I 
    INNER JOIN Item_Category IC ON I.item_id = IC.item_id 
    INNER JOIN Category C on IC.category_id = C.category_id 
  WHERE 
    C.category_name = 'MyCategory'

或者项目具有哪些类别:

SELECT C.*
  FROM Category C
    INNER JOIN Item_Category IC.category_id = C.category_id 
    INNER JOIN Item I on IC.item_id = I.item_id
  WHERE 
    I.item_name = 'MyItem'

如果类别中存在层次结构,则可以使用类别表中的递归关系表示,例如:

CREATE TABLE Category(
  category_id INT NOT NULL, 
  category_name VARCHAR(255) NOT NULL,
  parent_category_id INT NOT NULL REFERENCES Category(category_id)
)

这会使事情变得更复杂,因为您必须使用递归查询来获取类别及其子项的所有记录.一种更简单的方法,如果你只有两个级别的类别,它只是使它成为类别表上的第二个字段,如:

CREATE TABLE Category(
  category_id INT NOT NULL, 
  category_name VARCHAR(255) NOT NULL,
  subcategory_name VARCHAR(255) NULL
)

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有