如何加入其他表格相关的多个表格
我正在开发一个网站,人们可以将他们的房屋出租。我使用的PHP 5.2.0和MySQL 5+如何加入其他表格相关的多个表格
出版物存储在表像这样
ta_publications
+---+-------------+------+
|id | name | date |
+---+-------------+------+
| 1 | name_001 | ... |
| 2 | name_002 | ... |
| 3 | name_003 | ... |
+---+-------------+------+
我有diferent出版物,其中有“特色”,如“互联网”,“发服务“,”卫星电视“等。
这些功能可能会在将来发生变化,我希望能够添加/删除/修改它们,因此我将它们存储在数据库中的表中。
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的出版物,其中有互联网,无线网络和卫星电视。
我有同样的数据架构的图片,我把它们存储在该表中
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个不同的查询,显然效率不高。
编辑:
我的问题是,我怎么可以创建,给予一定的发布ID的SQL查询,将返回:所有发布的数据(上的一切ta_publications)+它的所有功能+最重要的(订单0)image 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);
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]
如果我正确地关注了你的结构,这应该给你你需要的连接。你可以通过添加希望的列添加到选择的统计结果。希望这有助于。
写得很好的问题,因为你是那么的新鲜。 :) + vote – Layke
你实际上没有问过问题。显示你想要达到的目标。 –
那么你是要求一个查询返回所有的出版物,按ID,包括他们的功能和顶部图像? –