我正在开发一个人们可以出租房屋的网站。我正在使用php 5.2.0和MySQL 5 +
出版物存储在这样的表中
ta_publications
+---+-------------+------+
|id | name | date |
+---+-------------+------+
| 1 | name_001 | ... |
| 2 | name_002 | ... |
| 3 | name_003 | ... |
+---+-------------+------+
我有不同的出版物,有“互联网”,“制作服务”,“卫星电视”等“功能”。
这些功能将来可能会发生变化,我希望能够添加/删除/修改它们,因此我将它们存储在表格的数据库中。
ta_features
+---+-------------+
|id | name |
+---+-------------+
| 1 | Internet |
| 2 | Wi-Fi |
| 3 | satelital tv|
+---+-------------+
与使用下表的出版物相关
ta_publication_features
+---+-------------+----------------+
|id | type_id | publication_id |
+---+-------------+----------------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 1 |
+---+-------------+----------------+
我认为这很容易理解;有一个名为name_001的出版物,它有互联网,Wi-Fi和卫星电视。
我有相同的图像数据架构,我将它们存储在此表中
ta_images
+---+-------------+
|id | src |
+---+-------------+
| 1 | URL_1 |
| 2 | URL_2 |
| 3 | URL_3 |
+---+-------------+
并使用下表将它们与出版物相关联
ta_publication_images
+---+-------------+----------------+----------+
|id | img_id | publication_id | order |
+---+-------------+----------------+----------+
| 1 | 1 | 1 | 0 |
| 2 | 2 | 1 | 1 |
| 3 | 3 | 1 | 2 |
+---+-------------+----------------+----------+
列顺序给出了在列出单个出版物时应显示出版物的顺序。
Philipp Reichart向我提供了一个查询,该搜索将搜索并获取具有某些功能的所有出版物。它适用于列出出版物,我无法修改它以返回我需要的数据。
所以我想我将运行该查询并获取所有通过搜索条件的出版物,然后使用另一个查询来列出它们。
这些出版物的清单应包括所有出版物数据(ta_publications上的所有内容)+所有出版物的特征+最重要的(订单0)图像src。
对于每个出版物,我都可以有两个简单的查询,它们将分别返回最重要的图像和所有功能,但是当每页列出25个出版物时,它将是1个搜索查询+(2个查询)每个出版物* 25个出版物)= 51个不同的查询,显然效率不高。
编辑:
我的问题是,如何创建一个SQL查询,给定一些发布ID,将返回:所有发布数据(ta_publications上的所有内容)+所有功能+最重要(0阶)图像src
答案 0 :(得分:1)
Select pub.Name as [Publication], f.name as [Feature], i.name as [Image] from ta_publications pub
Join ta_publications_features pf on pf.publication_id = pub.id
Join ta_features f on f.id = pf.type_id
Join ta_publication_images pi on pi.publication_id = pub.id
Join ta_images i on i.id = pi.img_id
Where pub.id = 'appropriate id'
order by i.[order]
如果我正确地遵循了您的结构,那么应该为您提供所需的连接。并且您可以通过添加来为选择语句中的结果添加所需的列。希望这会有所帮助。
答案 1 :(得分:1)
您将获得有关此文件的冗余发布和图像数据,但这是通过一个查询执行此操作的方法:
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 );