2012-08-31 23 views
0

我有兩個表:MySQL查詢:接合或分開

一個被稱爲數據和只有一個(唯一的)行每ID。 其次是圖片並且每個ID有3行。

每次頁面加載時,我想取數據和一個圖像爲正好5不同的ID。

我現在的問題是:兩個單獨的SELECT查詢或一個查詢,其中兩個都加入。

查詢:

... 

$all = $row["iD"] // includes **5** last iDs - fetched from DB 
$all = implode(',',$all); 

SELECT Name, Address FROM data WHERE iD IN($all); 
SELECT url FROM images WHERE iD IN ($all) LIMIT 1; 

我已經有3其他選擇查詢頁面上,所以我想知道什麼是關於性能最好,一個更大 - 加入兩個小 - 更快的查詢。

如果加入,這兩者如何加入?

回答

1

您每個ID有三個圖像,並且希望最後插入的圖像(又名「最近的內容」)每個ID有一個圖像?

那麼你可以使用一個簡單的自然通過這樣的加盟與組結合:

SELECT d.Name, d.Address, MAX(i.url) 
FROM data d, images i 
WHERE i.iD = d.iD 
GROUP BY d.Name, d.Address 
ORDER BY d.iD DESC 
LIMIT 5 

大部分是更好的時間來選擇相結合,跳過programmitcally開銷(調用的mysql_query()在循環本身例如)。 但有時它取決於底層數據。

+0

是的,但圖像不必是最新的。只有三個中有一個具有合適的ID。 :)謝謝 – John

+0

然後只是刪除訂單BY /限制,並添加一個額外的AND說明您想要的IN($值)(在組之前) – Najzero

+0

好吧,會這樣做,謝謝:) – John

0

由於您查詢到完全獨立的表,我建議你留在2次獨立的查詢:這樣可以使結果集更小,使得它更可能的是,至少有一個停留在查詢緩存,

關於你第二個查詢:你是否明白,這不能保證獲取一個特殊的URL,但任何?主要是第一個關鍵,但不能保證如此。

+0

是的,該URL does not物。只要ID是正確的,任何圖像都可以。 :) 謝謝 – John

0

有關性能問題的答案,請參閱JOIN queries vs multiple queries。我可以從那裏瞭解到,性能問題因具體情況而異,因此您應該測試兩者。

對於加入,你可以做;

SELECT User.iD, User.Name, User.Address, Image.url 
FROM images as Image 
JOIN data as User 
    ON Image.iD = User.iD 
WHERE Image.iD IN ($all) 
LIMIT 1; 

它還沒有測試,所以你應該吃一粒鹽。這至少是一個起點。