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

标签 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 方式可以实现我的目标?

最佳答案

进行两个查询可能会更容易,一个查询获取类别和标题,然后另一个查询获取该 mid 的所有 attribute-attribute_info 对。然后,将第二个数组附加到第一个数组。

当然,如果您的任何属性与您的其中一个标题相匹配,您就会遇到问题。 :)

关于php - 定义媒体列表的属性并在一行中返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25875779/

相关文章:

mysql - 将 Mysql 列默认值更改为 CURRENT_DATE 会出现错误?

java - 为什么我在使用 hibernate.hbm2ddl.auto 和 H2 时遇到异常,但使用 PostgreSQL 却可以正常工作?

mysql - 如何查找两个表中不匹配的计数?

mysql - 如何查找数据库中值之间的关系

php - 类内准备好的语句不起作用

mysql - 你将如何根据 'created' 日期与 MySQL 之间的差异从表中选择记录?

在 apache2 上安装 php-ffmpeg

php - WordPress 自定义表更新不起作用

PHP for 和循环数组

php - 如何检查远程服务器是否支持 PHP?