我想建立一个媒体列表,它可以容纳不同的媒体类型,如电影、电视剧、书籍、游戏,并且每种类型都可以附加不同的属性。
现在我有下表:
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
方式可以实现我的目标?
最佳答案
进行两个查询可能会更容易,一个查询获取类别和标题,然后另一个查询获取该 mid 的所有 attribute-attribute_info 对。然后,将第二个数组附加到第一个数组。
当然,如果您的任何属性与您的其中一个标题相匹配,您就会遇到问题。 :)
关于php - 定义媒体列表的属性并在一行中返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25875779/