[英]How to join multiple tables related by other tables
我正在開發一個人們可以出租房屋的網站。 我正在使用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
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]
如果我正確地遵循了你的結構,這應該給你你需要的連接。 並且您可以通過添加將所需列添加到選擇參數中的結果..希望這會有所幫助。
您將獲得有關此文件的冗余發布和圖像數據,但這是一種使用一個查詢執行此操作的方法:
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 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.