关于产品分类的mysql问题

刘泓宾
  • 21

这边有两张表,一张表为数据表,一张表为分类表
其中,分类表是做了二级分类,字段分别有:name(分类名),level(上级)
数据表对应有分类字段为cid,cid存放多个分类,存放格式为:1,2,3
如果这边需要查询:后缀跟上xxx.com/index?cid=x这种
请问需要如何查询?
这边我想了几种方案,但是都没法去解决
几种情况:
1.数据表只放了一个分类,例如为2,查询的时候完全可以用“=”或者“in”来标识
2.如果这边选择的cid为第一层,那么需要先查询当前cid下级的cid,查询出来为 2,3,4,5,数据表里面部分有为2,或者是3,同时也有可能为2,3,和2,8这种。那么就要求字段 cid 与要查询的cid集合任意相同的数字都提取出来。
(1,2)与(2,4)
(1,2,4)与(1,12,2,4)
只有有任意相同的都可以。这边大家思考一下,我现在脑子也比较乱

回复
阅读 1.3k
3 个回答
✓ 已被采纳

造成目前混乱的问题是什么,是cid存放了多个分类,且存放是1,2,3这种数据格式.
在不考虑性能(几十秒的接口都能接受的话)这样做是可以的,可以首先拿到全数据集的id-cid,然后在程序中处理cid,用传入的参数进行以此过滤,之后会拿到符合条件的数据,然后再根据id去数据库中拿具体的值.

但是这样子会有大量的全表扫描.极其不建议

提一种比较好一些的数据表设计.
数据表:id-name-xxx等
分类表: cid-c_name-c_level
关系表: incr_id, data_id, c_id.

这样子的设计可以在根据数据查所有分类,根据分类查所有数据的时候都比较快,而且加载数据很少,第一次查对应要求的id,第二次去拿详细数据,还可以使用join一次性搞定.

希望帮到你,有什么觉得不好的回复讨论.

数据表是指商品表? 连表查询试试?

一个产品能属于多个分类吗?多对多关系你就不能只用两个表实现,这是违反各种范式的设计。应该设置一个专门的表来存放产品和分类的关系,存放二者的主键。

如果树形多级分类,可以用树形结构的通常设计方法,用一个字段来串接父分类的id,比如如果分类3父分类是8,那么这个字段值就是8/3,这样你可以用like来查询一个分类及下级分类的所有内容。

宣传栏