Dan*_*iel 5 php mysql sql database database-design
我正在开发一个人们可以出租房屋的网站.我正在使用php 5.2.0和MySQL 5+
出版物存储在这样的表格中
ta_publications
+---+-------------+------+
|id | name | date |
+---+-------------+------+
| 1 | name_001 | ... |
| 2 | name_002 | ... |
| 3 | name_003 | ... |
+---+-------------+------+
Run Code Online (Sandbox Code Playgroud)
我有不同的出版物,有"互联网","制作服务","卫星电视"等"功能".
这些功能将来可能会发生变化,我希望能够添加/删除/修改它们,因此我将它们存储在表中的数据库中.
ta_features
+---+-------------+
|id | name |
+---+-------------+
| 1 | Internet |
| 2 | Wi-Fi |
| 3 | satelital tv|
+---+-------------+
Run Code Online (Sandbox Code Playgroud)
与使用下表的出版物有关
ta_publication_features
+---+-------------+----------------+
|id | type_id | publication_id |
+---+-------------+----------------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 1 |
+---+-------------+----------------+
Run Code Online (Sandbox Code Playgroud)
我认为这很容易理解; 有一个名为name_001的出版物,有互联网,Wi-Fi和卫星电视.
我有相同的图像数据模式,我将它们存储在此表中
ta_images
+---+-------------+
|id | src |
+---+-------------+
| 1 | URL_1 |
| 2 | URL_2 |
| 3 | URL_3 |
+---+-------------+
Run Code Online (Sandbox Code Playgroud)
并使用下表将它们与出版物联系起来
ta_publication_images
+---+-------------+----------------+----------+
|id | img_id | publication_id | order |
+---+-------------+----------------+----------+
| 1 | 1 | 1 | 0 |
| 2 | 2 | 1 | 1 |
| 3 | 3 | 1 | 2 |
+---+-------------+----------------+----------+
Run Code Online (Sandbox Code Playgroud)
列顺序给出了在列出单个出版物时应显示的出版物的顺序.
Philipp Reichart向我提供了一个查询,可以搜索并获取具有某些功能的所有出版物.它适用于列出出版物,我无法修改它以返回我需要的数据.
所以我想我将运行该查询并获取所有通过搜索条件的出版物,然后使用另一个查询来列出它们.
这些出版物的清单应包括所有出版物数据(ta_publications上的所有内容)+所有出版物的特征+最重要的(0阶)图像src.
我可以为每个出版物提供两个简单的查询,它们将分别返回最重要的图像和所有功能,但是当每页列出25个出版物时,它将是1个搜索查询+(每个出版物有2个查询*25个出版物)= 51个不同的查询,显然效率不高.
编辑:
我的问题是,如何创建一个SQL查询,给定一些发布ID,将返回:所有发布数据(ta_publications上的所有内容)+所有的功能+最重要的(0阶)图像src
通过这个,您将获得冗余的出版物和图像数据,但这里有一种通过一个查询来完成此操作的方法:
SELECT p.id, p.name, p.date,
f.id, f.name,
i.id, i.src
FROM ta_publications p
JOIN ta_publication_features pf ON p.id = pf.publication_id
JOIN ta_features f ON f.id = pf.type_id
JOIN ta_publication_images pi ON p.id = pi.publication_id
AND pi.order = 0
JOIN ta_images i ON i.id = pi.img_id
WHERE p.id IN ( -- list of publication ids );
Run Code Online (Sandbox Code Playgroud)