2011-05-13 27 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

你的情况是很常见的,人们使用单查询在这种情况下,因为他们希望降低通话与数据库中,如果所有的数据在需要一次一次只获取所有数据和你的情况确实如此。

使用单个查询。