在mySQL中为项目列表存储订单的有效方法

在mySQL中为项目列表存储订单的有效方法,mysql,inner-join,Mysql,Inner Join,我希望代码更简洁、更高效,我还想知道关于以下问题的任何其他建议: 我有一个mySQL数据库,它保存关于一组照片名称的数据。哦,说100个照片名字 表1:(照片)包含以下字段: 照片id、照片名称 Ex数据: 1 | sunshine.jpg 2 | cloudy.jpg 3 | rainy.jpg 4 | hazy.jpg ... 1 | Summer Shots | 1,2,4 2 | Winter Shots | 2,3 3 | All Seasons | 1,2,3,4 ... 表2

我希望代码更简洁、更高效,我还想知道关于以下问题的任何其他建议:

我有一个mySQL数据库,它保存关于一组照片名称的数据。哦,说100个照片名字

表1:(照片)包含以下字段: 照片id、照片名称

Ex数据:

1 | sunshine.jpg
2 | cloudy.jpg
3 | rainy.jpg
4 | hazy.jpg
...
1 | Summer Shots | 1,2,4
2 | Winter Shots | 2,3
3 | All Seasons  | 1,2,3,4
...
表2:(类别)包含以下字段: 类别id、类别名称、类别顺序

Ex数据:

1 | sunshine.jpg
2 | cloudy.jpg
3 | rainy.jpg
4 | hazy.jpg
...
1 | Summer Shots | 1,2,4
2 | Winter Shots | 2,3
3 | All Seasons  | 1,2,3,4
...
以这种方式通过逗号分隔的值存储每个条目的照片顺序是否有效?这是我以前见过的一种方法,但我想知道其他方法在运行时是否更快

使用这种方式,我认为不可能对category表和photo表执行直接的内部联接,以获得每个类别的所有照片的单个匹配列表

Ex:Summer shots->sunshine.jpg,cloudy.jpg,hazy.jpg,因为它与1,2,4匹配


通过所有类别的迭代,然后照片将有一个O(n^2),必须有更好/更快的方法。请告诉我:)

在我看来,您可以使用另一个表来表示照片和类别之间的关系,其中包含字段category\u id、order\u id和photo\u id

我认为它使用起来会更简单,而且您可以完成您的加入

如果您决定使用该解决方案,我还建议您将photo_id设置为新表中的索引

--编辑--

表格照片'photo_id','photo_name'
  • photo_id是一个主键,唯一,具有自动递增功能,可能是一个索引
表类别“类别id”、“类别名称”
  • category_id是一个主键,唯一(除非您希望同一个类别可以有不同的名称),具有自动递增功能,可能还有一个索引
表类别内容“类别id”、“照片id”、“订单”
  • category_id是指向表category的列category_id的外键
  • photo_id是指向表photo的列photo_id的外键
  • 主键是类别id和顺序之间的组合主键
  • 照片id和类别id都是索引

使用“index”某种程度上告诉MySQL,您希望优化对索引列的研究,当您注意到许多查询在特定列上具有WHERE和/或JOIN时,通常最好将列设置为索引。此外,除非它简化了某些事情,否则像您这样将多个数据合并为一个数据几乎从来都不是一个好主意,例外情况可能是将电话号码前缀与实际号码以及类似的一些事情组合在一起,但它们是例外情况。如果使用文件,在表中硬编码顺序的方式会很好,但在数据库中,最好使用另一个表,而不是使用逗号分隔符。有什么问题吗?

“以这种方式通过逗号分隔的值存储每个条目的照片顺序是否有效?”
没有,这是一个糟糕的解决方案<代码>“我想知道其他东西在运行时是否更快。”结构比速度梦想更重要。学习数据库基础知识,然后才开始关注不会影响它的事情的“速度”,然后请发布一些东西,告诉我如何在结构上做得更好!