多个MySQL查询与多个PHP foreach循环
数据库结构:多个MySQL查询与多个PHP foreach循环
id galleryId type file_name description
1 `artists_2010-01-15_7c1ec` `image` `band602.jpg` `Red Umbrella Promo`
2 `artists_2010-01-15_7c1ec` `image` `nov7.jpg` `CD Release Party`
3 `artists_2010-01-15_7c1ec` `video` `band.flv` `Presskit`
我要拉出来的图像为应用程序的一个部分,在另一视频等是更好地使多个MySQL像这样各部分查询:
$query = mysql_query("SELECT * FROM galleries WHERE galleryId='$galleryId' && type='image');
...或者我应该建立一个关联数组,只是通过在阵列上,每当我需要使用结果集在循环?
感谢您的想法。
这取决于什么更重要:可读性或性能。我期望一个查询和预填充PHP数组的执行速度会更快,因为数据库连接的开销很大,但是对每个部分的简单查询更具可读性。除非你知道(而不仅仅是希望),否则你会得到大量的流量,我会去单独的查询,然后担心优化,如果它看起来像是一个问题。到那时,还会有其他的事情要做,比如构建一个数据访问层并添加一些缓存。
最好有多个查询。每次运行查询时,所有数据都会被取出并加载到内存中。如果你有5种不同的类型,这意味着每种类型的页面加载5倍于其需要的数据量。
即使一次只有一个,如果您有超过100个,或者您可以合理地在一个页面上合理显示的次数很多,您可能会很快开始使用LIMIT/OFFSET查询进行分页。
如果用“sections”表示用户可以查看的单独的单个页面(单独的HTTP请求),那么我会根据需要建议每种类型的查询。如果在只有图像数据集的页面上,您确实不需要获取视频数据集。你不会真的节省很多时间提取所有的东西,因为无论如何,你将连接到每个页面的数据库(我假设)。
如果用“sections”表示一个页面的不同部分,立刻。这可以节省您的查询时间(只有一个查询)。
但是,根据数据集的大小,您可能会遇到PHP内存限制查询所有内容的麻烦。然后,您可以尝试提高内存限制,但如果失败了,您可能不得不退回到每种类型的查询。
使用query-per-type方法会将一些计算负载移至数据库服务器,因为您只会请求并获取您真正需要的内容。而且您不必编写代码来筛选和排序结果。过滤和排序是数据库通常比PHP代码更好的事情。如果可能的话,启用MySQL的查询缓存,这将加快这些查询的速度,远远超过您可以用PHP编写的任何内容。
如果您的数据都来自一个表,我只会做一个查询。
我认为你正在建立一个页面,包括图片部分,视频部分,音乐部分等。编写你的查询按媒体类型排序的返回结果 - 遍历所有图片,然后所有视频,然后是所有的音乐。
谢谢大家 - 这个(如果属实的话)对我来说最合适,因为每个类别中只有少数几个文件。一个查询是。 – jay 2010-01-15 19:39:08