我想建立一个媒体列表,可以容纳不同的媒体类型,如电影,电视剧,书籍,游戏,每种类型都可以附加不同的属性。
现在我有以下表格:
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
categories
包含有关不同媒体类型的信息。 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
方式实现目标的优雅方式是什么?
答案 0 :(得分:0)
制作两个查询可能更容易,一个用于获取类别和标题,另一个用于获取该中间的所有attribute-attribute_info对。然后,将第二个数组附加到第一个数组。
当然,如果您的任何属性与您的某个标题匹配,那么您将遇到问题。 :)