簡體   English   中英

如何連接其他表相關的多個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM