2011-05-13 23 views
0

我有一個表,看起來有點像這樣:多個查詢或額外的數組處理?

CREATE TABLE foobar 
(
    id INT(6) NOT NULL AUTO_INCREMENT, 
    category ENUM('Cat1','Cat2','Cat3','Cat4') NOT NULL, 
    name VARCHAR(255) NOT NULL, 
    PRIMARY KEY(id), 
); 

我有一個頁面,所有這些數據將顯示如下:

<h3>Cat1</h3> 
<ul> 
    <li>Value1</li> 
    <li>Value2</li> 
</ul> 


<h3>Cat2</h3> 
<ul> 
    <li>Value1</li> 
    <li>Value2</li> 
</ul> 

... 

我的問題是它的效率更高,使每個類別的一個查詢將結果集限制爲一個類別... SELECT name FROM foobar WHERE category = cat1;或者我是否應該獲取整個表SELECT category, name FROM foobar;,然後使用PHP處理結果,然後遍歷每個類別並顯示其值。

哪個更有效率還是有另一種方法來做到這一點?

謝謝!

+0

它通常*更有效地運行更少的查詢,但是您應該測試兩種方法並查看哪種方法更好。如果你只是簡單地傾銷整個表格,最有可能的是單個查詢會更好。 – 2011-05-13 16:16:14

+0

你可以發佈'SELECT類別,COUNT(類別)從foobar GROUP BY類別'的輸出,並指出該數字(和分佈)是否可能會改變? – 2011-05-13 16:19:52

+0

@ james-c現在在該特定表中少於100個項目。分佈約爲。 25/25/20/30。不過,這份名單將在未來增長。 – NightHawk 2011-05-13 16:25:55

回答

0

在大多數情況下,你想要做後者。多次訪問數據庫會消耗大量額外的網絡帶寬,無論如何,您最終都會在PHP端循環。

這與N+1查詢問題類似,您可以在StackOverflow或其他位置閱讀更多信息。

例如: What is SELECT N+1?

0

你的情況是很常見的,人們使用單查詢在這種情況下,因爲他們希望降低通話與數據庫中,如果所有的數據在需要一次一次只獲取所有數據和你的情況確實如此。

使用單個查詢。