2010-08-19 63 views
-1

我想查詢數據庫中的2個表,每個查詢與彼此沒有任何關係,除了在同一頁上。PHP MySql查詢2個同時沒有公共屬性的表?

查詢1 - 頁面上的第一個查詢將檢索的文本和圖像在整個頁面發現從表A.

查詢2 - 第二個查詢將檢索幾款產品有圖像,說明和標題表B中的每個產品。

我知道將第二個查詢放在第一個查詢的while循環內可以工作,但當然效率很低。

我如何以及通過1查詢檢索所需的所有數據的最佳方法是什麼?

感謝,

  • 戴恩
+2

爲什麼將它們結合在一起,如果它們不相關?如果它們不相關,爲什麼要在查詢1的循環內部執行查詢2? – ircmaxell 2010-08-19 17:03:09

+0

ircmaxell - 沒有2個查詢在同一頁上效率低下? – teamdane 2010-08-19 17:05:32

+0

我寧願有2個簡單的查詢,而不是1個過於複雜的查詢。從可維護性角度和性能角度來看都是如此。減少並不總是更好... – ircmaxell 2010-08-19 17:13:22

回答

3

因此,所有你想知道的是如果確定對同一網頁2個查詢?它的A-確定。繼續前進。它完全正常。沒有人期望桌面新聞和桌面產品之間的聯繫。它通常使用兩個查詢從兩個不相關的表中獲取數據。

+0

它們不相關,因此可以在同一頁上有2個查詢嗎? – teamdane 2010-08-19 17:21:14

0

使用LEFT或INNER JOIN(取決於您是否希望顯示錶A有沒有相應的記錄在表B記錄)

SELECT a.*, b.* 
FROM TableA a 
[LEFT or INNER] JOIN TableB b ON (b.a_id = a.id) 
+0

我需要表A中的所有記錄和表B中的所有記錄。沒有要加入它們的ID,沒有列相關。 – teamdane 2010-08-19 17:22:06

+0

在這種情況下,我會有2個獨立的查詢。 – a1ex07 2010-08-19 17:39:01

0

如果沒有辦法在兩個表之間的相互關係,那麼你不能使用JOIN從兩者中抓取記錄。您可以使用UNION查詢,但假設您可以匹配每個表中的字段,因爲UNION要求您從每個表中選擇相同數量/類型的字段。

SELECT 'pageinfo' AS sourcetable, page.id, page.images, page.this, page.that 
WHERE page.id = $id 

UNION 

SELECT 'product' AS sourcetable, products.id, products.image, product.other, product.stuff 

但這是非常醜陋的。您仍然強迫數據庫服務器在後臺執行兩個查詢以及將它們組合到單個結果集中的額外工作,然後您必須執行額外的工作來解散代碼以引導。

更簡單,概念和維護方面,做兩個單獨的查詢,而不是更容易。