定义媒体列表的属性并在一行中返回值

时间:2014-09-16 18:15:11

标签: php mysql sql

我想建立一个媒体列表,可以容纳不同的媒体类型,如电影,电视剧,书籍,游戏,每种类型都可以附加不同的属性。

现在我有以下表格:

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方式实现目标的优雅方式是什么?

1 个答案:

答案 0 :(得分:0)

制作两个查询可能更容易,一个用于获取类别和标题,另一个用于获取该中间的所有attribute-attribute_info对。然后,将第二个数组附加到第一个数组。

当然,如果您的任何属性与您的某个标题匹配,那么您将遇到问题。 :)