我想建立一个媒体列表,它可以容纳不同的媒体类型,如电影、电视剧、书籍、游戏,每种类型都可以附加不同的属性。
现在我有以下表格:
categories
catid | name
1 | Books
2 | Movies
3 | Tv Series
media
mid | title | catid
1 | Book 1 | 1
2 | Movie 1 | 2
3 | TV Series 1 | 3
4 | Book 2 | 1
5 | Movie 2 | 2
attributes
attrid | catid | name
1 | 1 | number of pages
2 | 1 | description
3 | 1 | year
4 | 2 | length
5 | 2 | cast
6 | 2 | description
7 | 3 | cast
8 | 3 | description
9 | 3 | year
10 | 3 | number of episodes
attribute_info
attraid | mid | attrid | value
1 | 1 | 1 | 213
2 | 1 | 2 | Description...
3 | 1 | 3 | 1996
4 | 2 | 4 | 210 minutes
5 | 2 | 5 | Actor1, Actor2
6 | 2 | 6 | Description...
7 | 3 | 7 | Actor3, Actor4
8 | 3 | 8 | Description...
9 | 3 | 9 | 2010
10 | 3 | 10 | 12
CCD_ 1保存关于不同媒体类型的信息。media
保存关于单个媒体条目的信息,attributes
定义每个类别的不同属性,attribute_info
最终保存信息本身。
现在我正在寻找一种通过SQL
获取信息的有效方法理想情况下,我可以将媒体属性的所有信息分组到一个输出行中,并获得类似的信息
Array([mid] => 1, [title] => Book 1, [catid] => 1, [name] => Books, [number of pages] => 213, [description] => Description..., [year] => 1996)
实现这一点的方法应该是内部联接,但我不喜欢在向类别添加属性时更改我的PHP代码。SQL
中有什么优雅的方式来实现我的目标?
进行两个查询可能更容易,一个用于获取类别和标题,另一个用于获得该mid的所有attribute-attribute_info对。然后,将第二个数组附加到第一个数组。
当然,如果你的任何属性与你的某个标题匹配,你就会遇到问题。:)