如何连接其他表相关的多个表

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

Mik*_*e G 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 );
Run Code Online (Sandbox Code Playgroud)