2012-09-12 29 views
0

如標題中所述。如何創建從多個表中檢索數據的查詢,並且表之間沒有關係

如何創建從多個表中檢索數據的查詢,並且表之間沒有關係。

例子:
我有兩個表如下所示:

Table (Categories)   Table (Pic_files) 
------------------- | ---------------------- 
Cat_id | cat_name | pic_id | pic_title 
------------------- | ---------------------- 
    1 | Animals |  1 | Dog_Walks 
------------------- | ---------------------- 
    2 | Nature |  2 | red_flower 
------------------ | ---------------------- 
        |  3 | blue_flower 
        | ---------------------- 
so on | so on  | so on | so on 
------------------ | ---------------------- 

我要的是像下面兩個查詢組合在一個查詢

查詢1:

("SELECT cat_name FROM Categories WHERE Cat_id='2'") 

問題2:

("SELECT pic_title FROM Pic_files WHERE Cat_id='2' LIMIT 5 ") 

如果我想打印出特定表的數據我做下一

foreach($data as $pic){ 
    echo $pic['pic_title']; // to get the data from Categories table 
} 

也如果

foreach($data as $cat){ 
    echo $cat['cat_name']; // to get the data from Pic_files table 
} 

總之,我想結合2個或多個查詢在一個查詢中,並按列名處理,並且不要忘記所有表與某些查詢沒有任何關係

+0

奇怪的是,在你的例子中有表之間有一個關係(Cat_ID)。所以當然在這些表上做一個'JOIN'很容易。但我想我不知道你想加入無關表格的含義。你能給個例子嗎? –

+0

是的,有關係,但這只是一個例子,但我想與他們沒有關係的對待。 –

+0

我想在一個查詢中減少2個查詢的數量 –

回答

0

你可以用一個交叉聯接做到這一點:

select * 
from (SELECT cat_name FROM Categories WHERE Cat_id='2') cat cross join 
    (SELECT pic_title FROM Pic_files WHERE Cat_id='2' LIMIT 5) t 
+0

非常好,但有一個問題。當沒有來自任何表格的數據給我一個錯誤。我想如果任何表中沒有數據,則補充查詢以從其他表中獲取數據。 –

0

我認爲人們正在用在這裏給你一個答案是理解你在找什麼掙扎。

肯定有PHP庫,它允許您通過一次調用數據庫來執行多個SQL查詢。以mysqli_multi_query爲例。但是,這聽起來不像是你正在尋找的東西。看起來你想找到一種神奇的方式來在不相關的表上執行多個查詢作爲單個查詢,然後奇蹟般地能夠獨立地獲取數據集。如果您打算在無關表格上執行像笛卡爾式連接這樣的事情,那麼您的結果集中的結果將比您要查找的結果要多得多,導致數據庫和應用程序出現性能問題。

這聽起來像你想減少查詢的數量,以減少查詢的數量,這聽起來像一個糟糕的設計方法國際海事組織。當然,您可以使用連接最小化RELATED表上的查詢。但試圖以某種方式加入不相關的表格可能會給你的系統帶來比你討價還價更多的複雜性和性能問題。減少對數據庫的查詢並不是所有數據庫性能優化的最終目標。您需要確保您的表格適合您的查詢索引。您需要確保您的數據類型和大小適合您正在存儲的數據。你需要確保你有一個正確分配的內存來保持你的索引在內存中。您需要確保您有適當配置的服務器以滿足您的內存,磁盤容量和磁盤I/O要求。一旦你完成了所有最大化的優化,並且你的系統已經最大化,並且你已經確定你係統上的問題對不相關的表有兩個不同的查詢,而不是一個聯合查詢,那麼你應該擔心你現在擔心的是什麼。

相關問題